1 / 2
文档名称:

结构体对齐方式.doc

格式:doc   页数:2
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

结构体对齐方式.doc

上传人:gyzhluyin 2014/11/22 文件大小:0 KB

下载得到文件列表

结构体对齐方式.doc

文档介绍

文档介绍:结构体对齐方式
结构体(struct)的sizeof值,并不是简单的将其中各元素所占字节相加,而是要考虑到存储空间的字节对齐问题。先看下面定义的两个结构体.
struct
{   char a;
    short b;
    char c; }S1; 
struct
{   char  a;
    char  b;
    short c; }S2;  分别用程序测试得出sizeof(S1)=6 , sizeof(S2)=4 
可见,虽然两个结构体所含的元素相同,但因为其中存放的元素类型顺序不一样,所占字节也出现差异。这就是字节对齐原因。通过字节对齐,有助于加快计算机的取数速度,否则就得多花指令周期。
字节对齐原则:
结构体默认的字节对齐一般满足三个准则:
1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除;
2) 结构体每个成员相对于结构体首地址的偏移量(offset)都是成员自身大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding);
3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节(trailing padding)。
通过这三个原则,就不难理解上面两个struct的差异了. 
对于struct S1, 为了使short变量满足字节对其准则(2), 即其存储位置相对于结构体首地址的offset是自身大小(short占2个字节)的整数倍,必须在字节a后面填充一个字节以对齐;再由准则(3),为了满足结构体总大小为short大小的整数倍,必须再在c后面填充一个字节。对于struct S2, 却不必如上所述的填充字节,因为其直接顺序存储已经满足对齐准则。
如果将上面两个结构体中的short都改为int(占4个字节), 那么会怎么样呢?程序得出sizeof(S1)=12, sizeof(S2)=8 
利用上面的准则,也不难计算得出这样的结果。S1中在a后面填充3个字节、在c后面填充3个字节,这样一共12个字节;S2中在a、b顺序存储之后填充两个字节用以对其,这样一共就8个字节。
当然,在某些时候也可以设置字节

最近更新

2026年山西金融职业学院单招职业倾向性测试模.. 41页

2026年巴中职业技术学院单招职测考试题库必考.. 42页

2026年广东岭南职业技术学院单招职测备考题库.. 41页

2025年苏州百年职业学院中单招职业技能考试模.. 39页

2026年广东省阳江市单招职业适应性测试模拟测.. 42页

2025年菏泽学院单招职业倾向性测试题库汇编 38页

2025年营口职业技术学院单招职业技能考试模拟.. 41页

2025年衡阳幼儿师范高等专科学校单招职业适应.. 43页

2025年襄阳职业技术学院单招职业适应性测试模.. 41页

2026年广西生态工程职业技术学院单招职业技能.. 41页

2026年广西经济职业学院单招职业倾向性测试模.. 42页

2025年西安海棠职业学院单招职业技能考试模拟.. 39页

2025年西安职业技术学院单招职业技能考试模拟.. 40页

2025年西昌民族幼儿师范高等专科学校单招职业.. 39页

2025年许昌电气职业学院单招职业适应性考试模.. 40页

2026年成都工贸职业技术学院单招职业技能考试.. 41页

2025年贵州护理职业技术学院单招综合素质考试.. 41页

2026年护理单招模拟试题附答案 43页

2025年贵州电子科技职业学院单招职业适应性考.. 40页

2025年贵阳职业技术学院单招职业适应性测试模.. 41页

2025年赣州职业技术学院单招职业适应性测试模.. 41页

2026年枣庄职业学院单招职业技能测试模拟测试.. 42页

2025年辽宁建筑职业学院单招职业适应性测试模.. 38页

2025年辽宁现代服务职业技术学院单招职业技能.. 40页

2025年辽宁省大连市单招职业适应性考试模拟测.. 42页

2026年江苏商贸职业学院单招职业倾向性测试模.. 41页

2026年江苏省宿迁市单招职业适应性考试模拟测.. 41页

2025年运城师范高等专科学校单招职业倾向性测.. 39页

2025年通化医药健康职业学院单招职业倾向性测.. 41页

2025年遂宁能源职业学院单招职业技能考试模拟.. 41页