字节对齐
来源:互联网 发布:如何克服拖延症 知乎 编辑:程序博客网 时间:2024/06/07 01:23
为了提高CPU访问内存效率,编译器一般会对结构体变量进行字节对齐。
long1, long2类型都为long, long1在内存中的位置正好与内存字边界对齐,CPU存取这个数只需访问内存1次;而long2在内存中跨越字边界,CPU存取这个数则需访问内存2次 由此可以看出,字节对齐主要提高CPU访问内存效率.
一般编译器生成代码时,都会根据各种CPU类型将变量进行对齐,对齐主要针对 struct,union, class类型,对于函数当中的单独变量,地址先后顺序是没有关系,也没有规定的 结构struct 中变量与变量之间的空间叫padding,有时为了对齐在一个结构的最后也会填入padding ,通常叫tailpadding.
对齐规则
每种基本数据类型都有自然对齐值(Natural Align ),实际Align值(Actual Align )与其自然对齐值相等。
1 ) struct 结构实际Align值等于该结构所有成员的实际Align值中最大一个成员实际Align 值。
2 ) array 数组实际Align值等于该数组成员的实际Align值
3 ) union联合实际Align值等于该联合最大成员实际Align值
存储空间分配
1 )一个结构成员的偏移(offset )等于该成员实际Align值整数倍,如果凑不成整数倍就在其前加padding
2 )一个结构的大小等于该结构实际Align值整数倍,如果凑不成整数倍就在其后加tail padding
总结:
为了提高CPU访问内存效率,编译器一般都要对结构体进行字节对齐处理 所以我们在实际编程过程中需要考虑到字节对齐因素,在定义结构体时最好遵循如下原则:
1 )数据类型长度小的成员放在结构体前面,数据类型长度大的成员放在结构体后面
2 )如果没有特定要求,相同数据类型成员最好放在一起
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 2012-10-18 11gR2 concepts page 326 - 367
- Linux /etc/environment和/etc/profile
- Myeclipse如何跟踪调试
- 谷歌开放其数据中心 惊现星球大战“黑武士”
- 【转】误差矩阵(混淆矩阵)评价法
- 字节对齐
- 队列基础 (用队列打印杨辉三角)
- POJ3438 Balanced Lineup 基本线段树
- C++关键字
- C++下多线程的创建
- 求数组的子数组和的最大值
- hdu 1890 Robotic Sort(Splay应用)
- arm mini2440 基于v4l2 ffmpeg x264的视频远程监控 .
- 贪心算法简单实现