下面两个结构体

struct One {
double d;
char c;
int i;
} struct Two {
char c;
double d;
int i;
}

在#pragma pack(4)和#pragma pack(8)的情况下,结构体的大小分别是: 16 16 16 24.

分析:

许多实际的计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的首地址的值是某个数k(通常它为4或8)的倍数,这就是所谓的内存对齐。

每个特定平台上的编译器都有自己的默认“对齐系数”(32位机一般为4,64位机一般为8)。我们可以通过预编译命令#pragma pack(k),k=1,2,4,8,16来改变这个系数,其中k就是需要指定的“对齐系数”;也可以使用#pragma pack()取消自定义字节对齐方式。

struct 或者 union 成员对齐规则如下:

1. 第一个数据成员放在offset为0的地方,对齐按照对齐系数和自身占用字节数中,二者比较小的那个进行对齐;

2. 在数据成员完成各自对齐以后,struct或者union本身也要进行对齐,对齐将按照对齐系数和struct或者union中最大数据成员长度中比较小的那个进行;

先局部成员对齐,然后再全局对齐。

最新文章

  1. unity游戏在logcat中过滤一些不需要的Log
  2. 【BZOJ-4521】手机号码 数位DP
  3. JavaScript 运行时错误: 无法获取未定义或 null 一种解决方案
  4. 30天,O2O速成攻略【7.18广州站】
  5. iOS - MVVM 架构模式
  6. FZU 1914 Funny Positive Sequence
  7. 解决position:relative情况下,z-index无效的方法
  8. 自己在安装centos 系统时, 是使用英文安装 成功,现在系统语言为英语,如何设置为中文?
  9. 自定义按钮~自适应布局~常见bug
  10. ubuntu 上下载PHP的源代码
  11. Java虚拟机-类文件
  12. 持续集成-jenkins介绍与环境搭建
  13. asp.net core 今日所得
  14. Kafka技术内幕 读书笔记之(二) 生产者——服务端网络连接
  15. 判断字符串是否为正整数 & 浮点小数
  16. Authorization With Pundit
  17. javascript高级选择器querySelector和querySelectorAll
  18. JustOj 1974: 简单的事情 (组合数)
  19. LeetCode题解之Pascal's Triangle II
  20. [转]HTTP请求中的form data和request payload的区别

热门文章

  1. 【转】各种消息下wParam及lParam值的含义
  2. Android 自动化测试介绍
  3. python中的迭代器和生成器学习笔记总结
  4. Python3基础 list 使用for循环 删除列表中的重复项
  5. luogu P3387 【模板】缩点
  6. POJ 3480 John(SJ定理博弈)题解
  7. Codeforces Round #426 (Div. 2) C. The Meaningless Game
  8. 引用类(RC)
  9. django模型的元数据Meta
  10. Tensorflow的基本概念与常用函数