C/C++中关于struct内存对齐问题

来源:互联网 发布:pta编程 编辑:程序博客网 时间:2024/05/17 21:56

http://blog.163.com/liurong063327@126/blog/static/864037152011914105819906/


就这篇写的清晰明了。做如下总结:


1、对齐值如何计算


① 如果没有指定对齐值,则对齐值为成员变量中最大的那个值。

② 如果指定的对齐值(#pragam pack(value)// 2,4,6,8....),则对齐值为没有指定对齐值是的值和指定对齐值中的值,较小的那个值。


2、如何计算对齐

变量依照顺序申请空间,各变量必须本身为对齐值或者加起来能凑成对齐值,如果加起来超过了对齐值,则没有超出的部分开始,余下补空填满对齐值

,剩下的从上一个补满对齐值得地方开始算起,继续循环上述操作。直到最后一个变量计算完为止。 

------------------------------------------------------------------------------------------------------


题:struct st1{                                       struct st2{
          int i;                                                 char c;
          char c;                                             int i;
          short s;                                            short s;
       };                                                    };
       上述两结构体在内存中占用字节是多少,即sizeof(struct st1)=?, sizeof(struct st2)=?
解:8, 12
思考:这是struct结构的内存对齐问题,结构体的内存布局依赖于CPU、操作系统、编译器及编译时的对齐选项。其主要有:
1)结构体内部成员对齐
      对于结构体内部成员,通常会有这样的规定:各成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数。但是也可以看到,有时候某些字段如果严格按照大小紧密排列,根本无法达到这样的目的,因此有时候必须进行padding。各成员变量在存放的时候根据在结构中出现的顺序依次申请空间,同时按照上面的对齐方式调 整位置,空缺的字节编译器会自动填充也就是padding。如下图所示:
                   

C/C++中关于struct内存对齐问题 - L.R. - L.R.
      图中st1,第一个为int型,占用4个字节,第二个为char型,其偏移量为4,char所占的字节数为1,则偏移量是其占用字节数的倍数,则仅列其后,第三个为short型,占用字节数为2,前面已有字节为5,不是2的倍数,所以char后面padding一个字节,使得short的其实地址为6,所以对齐后,共占用8个字节。同理可得str2占用12个字节。
2)结构体之间对齐(此并不是考虑结构体内部的对齐,而是一组结构体的对齐,在计算单个结构体占用字节时并不考虑)
      虑整个结构体的对齐需求。ANSI C标准规定结构体类型的对齐要求不能比它所有字段中要求最严格的那个宽松,可以更严格。实际上要求结构体至少是其中的那个最大的元素大小的整数倍。因为有时候我们使用的是结构体数组,所以结构体的大小还得保证结构体数组中各个结构体满足对齐要求,同时独立的结构体与结构体数组中单个结构体的大小应当是一致的。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 录取通知书没收到怎么办 历年研究生录取人数 杜克大学录取要求 考研录取分数线 南加州大学录取分数线 在职研究生录取分数线 征集志愿录取规则 成人高考录取通知书 专科录取通知书什么时候到 三本录取时间 录取通知书什么时候 高校录取通知书 民航录取分数线 人民大学mba录取分数线 中国政法大学录取分数线 北京师范大学录取分数线 人民公安大学录取分数线 南宁师范大学录取分数线 东北师范大学录取分数线 北京理工大学录取分数线 2019全国高校录取分数 武亦姝被北大录取 广东财经大学录取分数线 南加大研究生录取条件 帝国理工学院录取 加州理工学院录取 北京舞蹈学院录取分数线 维克森林大学录取 北京邮电大学录取分数线 播音主持专业录取分数线 高考提前批次录取时间 成人高考本科录取分数线 2014成人高考录取分数线 师范大学排名及录取分数线 西安电子科技大学录取分数线 广东财经大学2018录取分数线 西安交通大学2018录取分数线 斯蒂文斯理工学院录取 成人高考专升本录取 成人高考专升本录取分数线 2018年成人高考多少分可以录取