【LVL1_6_c】【思考】X86 c语言结构体数据对齐的规则
2015-12-29 21:30
573 查看
数据对齐和CPU结构相关,其有利于CPU减少对内存的操作次数,提高存取效率。
写程序的时候,不需要考虑对齐问题,编译器会替我们选择适合目标平台的对齐策略
X86 CPU下C语言结构体的数据对齐规则:
规则1
数据成员对齐规则:结构(struct或联合union)的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储)。
规则2
结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储。(struct a里存有struct b,b里有char,int,double等元素,那b应该从8的整数倍开始存储。)
规则3
收尾工作:结构体的总大小,也就是sizeof的结果,必须是其内部最大成员的整数倍,不足的要补齐。
写程序的时候,不需要考虑对齐问题,编译器会替我们选择适合目标平台的对齐策略
X86 CPU下C语言结构体的数据对齐规则:
规则1
数据成员对齐规则:结构(struct或联合union)的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储)。
规则2
结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储。(struct a里存有struct b,b里有char,int,double等元素,那b应该从8的整数倍开始存储。)
规则3
收尾工作:结构体的总大小,也就是sizeof的结果,必须是其内部最大成员的整数倍,不足的要补齐。
相关文章推荐
- C语言结构体内存空间分配
- C++新增数据类型long long ,unsigned long long
- C++命名空间
- DevC++ 开debug
- 考考你的C语言
- c语言之遗漏---标准C的标记化结构初始化语法
- 《C++Primer 5e》学习笔记(4):语句
- 深入理解C++中函数参数——传值与传址详解
- 【笨木头C++】基与基础10:又是函数之引用
- C++ Queues(队列)、Priority Queues(优先队列)
- C语言 字符串操作函数
- 我推荐的一些C\C++书籍
- Something about C
- c++ Const关键字
- __attribute__ ((__packed__)) 编译通不过
- C语言 基础之printf打印输出
- HDU5595:GTW likes math
- caffe源码c++学习笔记
- 格式化C语言命令indent
- Cannot load library: soinfo_link_image(linker.cpp:1635)