您的位置:首页 > 编程语言 > C语言/C++

c语言中的边界对齐

2018-03-21 21:25 274 查看
        存储的数据如果对齐边界,则存取速度较快,同时简化了处理器与内存之间传输系统的设计,就是基于这样的硬件设计就有C语言中结构体的边界对齐。
先上一道题目,用gcc编译,32位机(严格来说程序是32位还是64位程序是更如何编译有关的)



这道题的正确答案是C。
边界对齐的规则如下:
1.编译器按照结构体成员列表顺序给每个成员分配内存
2.当成员需要满足正确的边界对齐时,成员之间用额外字节填充

3.结构体的首地址必须满足结构体中边界对齐要求最为严格的数据类型所要求的首地址

4.结构体的大小为其最宽数据类型的整数倍
说明:从第一个成员开始,挨着分配,如果大于了最宽数据类型,则空置到下一个n*最宽数据类型开始

除了自然对界外还有指定对界

· 使用伪指令#pragma pack (n),编译器将按照n个字节对齐;

· 使用伪指令#pragma pack (),取消自定义字节对齐方式。

C语言stddef.h头文件中定义了一个宏offsetof,可用于得到结构体成员存储位置相对于结构体首地址的偏移量,其原型为:offsetof(type,member),
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: