程序编译器对结构的存储的特殊处理确实提高CPU存储变量的速度,但是有时候也带来了一些麻烦,我们也屏蔽掉变量默认的对齐方式,自己可以设定变量的对齐方式。
编译器中提供了
#pragma pack(n)来设定变量以n
字节对齐方式。n字节对齐就是说变量存放的起始地址的
偏移量有两种情况:第一、如果n大于等于该变量所占用的字节数,那么偏移量必须满足默认的对齐方式,第二、如果n小于该变量的类型所占用的字节数,那么偏移量为n的倍数,不用满足默认的对齐方式。结构的总大小也有个约束条件,分下面两种情况:如果n大于所有
成员变量类型所占用的字节数,那么结构的总大小必须为占用空间最大的变量占用的空间数的倍数;否则必须为n的倍数。
下面举例说明其用法。
#pragma pack(push) //保存对齐状态
#pragma pack(4)//设定为4
字节对齐
struct test
{
char m1;
double m4;
int m3;
};
#pragma pack(pop)//恢复对齐状态
本文介绍如何使用编译器提供的#pragma pack(n)指令来自定义结构体变量的内存对齐方式,通过实例详细解析不同对齐数值对结构体大小及成员变量偏移量的影响。
377

被折叠的 条评论
为什么被折叠?



