1 / 15
文档名称:

结构体对齐方式.doc

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

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

分享

预览

结构体对齐方式.doc

上传人:2982835315 2019/12/27 文件大小:156 KB

下载得到文件列表

结构体对齐方式.doc

文档介绍

文档介绍:对齐原则为:单字节变量无需对齐,可放在任何地址双字节变量起始地址为2的倍数4字节变量首地址为4的倍数一个结构体变量定义完之后,其在内存中的存储并不等于其所包含元素的宽度之和。例一:                                      #include<iostream>                                     usingnamespacestd;                                        struct X                                        {                                              chara;                                             intb;                                              doublec;                                         }S1;                                      voidmain()                                   {                                        cout<<sizeof(S1)<<endl;                                        cout<<sizeof()<<endl;                                        cout<<sizeof()<<endl;                                        cout<<sizeof()<<endl;                                    }    比如例一中的结构体变量S1定义之后,经测试,会发现sizeof(S1)=16,其值不等于sizeof()=1、sizeof()=4和sizeof()=8三者之和,这里面就存在存储对齐问题。    原则一:结构体中元素是按照定义顺序一个一个放到内存中去的,但并不是紧密排列的。从结构体存储的首地址开始,每一个元素放置到内存中时,它都会认为内存是以它自己的大小来划分的,因此元素放置的位置一定会在自己宽度的整数倍上开始(以结构体变量首地址为0计算)。   比如此例,首先系统会将字符型变量a存入第0个字节(相对地址,指内存开辟的首地址);然后在存放整形变量b时,会以4个字节为单位进行存储,由于第一个四字节模块已有数据,因此它会存入第二个四字节模块,也就是存入到4~8字节;同理,存放双精度实型变量c时,由于其宽度为8,其存放时会以8个字节为单位存储,也就是会找到第一个空的且是8的整数倍的位置开始存储,此例中,此例中,由于头一个8字节模块已被占用,所以将c存入第二个8字节模块。整体存储示意图如图1所示。   考虑另外一个实例。例二:                                          structX                                           {                                               chara;                                               doubleb;                                               intc;                                            }S2;   在例二中仅仅是将double型的变量和int型的变量互换了位置。测试程序不变,测试结果却截然不同,sizeof(S2)=24,不同于我们按照原则一计算出的8+8+4=20,这就引出了我们的第二原则。       原则二:在经过第一原则分析后,检查计算出的存储单元是否为所有元素中最宽的元素的长度的整数倍,是,则结束;若不是,则补齐为它的整数倍。   例二中,我们分析完后的存储长度为20字节,不是最宽元素长度8的整数倍,因此将它补齐到8的整数倍,也就是24。这样就没问题了。其存储示意图如图2所示。   掌握了这两个原则,就能够分析所有数据存储对齐问题了。再来看几个例子,应用以上两个原则来判断。例三:                                           

最近更新

2023年宿州学院单招职业技能测试题库含答案 40页

2023年山东交通职业学院单招职业技能考试题库.. 40页

2023年山东劳动职业技术学院单招职业适应性测.. 40页

2023年山东圣翰财贸职业学院单招职业适应性考.. 41页

2023年山东外贸职业学院单招职业倾向性测试题.. 40页

2023年山东电子职业技术学院单招职业技能测试.. 40页

2026年假期教师家访活动方案 10页

2023年山西水利职业技术学院单招职业技能考试.. 41页

2023年巴中职业技术学院单招职业技能考试题库.. 40页

2023年怀化师范高等专科学校单招职业技能考试.. 40页

2023年桂林山水职业学院单招职业技能考试题库.. 40页

2023年江苏省南京市单招职业适应性考试题库附.. 40页

2023年江西新能源科技职业学院单招职业技能考.. 40页

2023年沧州幼儿师范高等专科学校单招职业技能.. 40页

2023年浙江省杭州市单招职业适应性考试题库推.. 40页

2023年渤海理工职业学院单招职业技能考试题库.. 42页

2023年湖南劳动人事职业学院单招职业技能考试.. 41页

2026年保育员读书总结 40页

2026年保育员工作计划优秀 10页

2023年福州大学至诚学院单招职业技能考试题库.. 41页

2023年红河卫生职业学院单招职业技能考试题库.. 40页

绿色制药材料创新 23页

2023年辽宁省大连市单招职业倾向性考试题库及.. 40页

2023年遵义职业技术学院单招职业技能考试题库.. 40页

2023年重庆信息技术职业学院单招职业技能考试.. 41页

2023年长江艺术工程职业学院单招职业技能考试.. 40页

2023年黑龙江省鹤岗市单招职业倾向性考试题库.. 41页

2024年万博科技职业学院单招职业适应性测试题.. 41页

2026年保安管理规章制度的管理 14页

2024年三峡电力职业学院单招职业适应性考试模.. 41页