title: pragma pack(n)与内存对其问题
date: 2016-06-08 15:32:11
categories: C++
tags:
- C
- C++
- 内存对齐
- pragma pack
作用:屏蔽掉编译器为变量设定的默认的对其方式,设定自己的对其方式
而#pragma pack(n)
表示设定变量以n字节对其。
- 如果n大于等于该变量所占的字节数,那么偏移量必须满足默认的对其方式
- 如果n小于该变量的类型所占用的字节数,那么偏移量为n 的整数倍,不用满足默认的对其方式。
结构体的总大小也有个约束条件:
- 如果n大于所有的成员变量类型所占用的字节数,那么结构的总大小必须为占用空间最大的变量占用的空间数的倍数
- 如果n小于所有成员变量类型所占用的字节数,那么必须为n的倍数。
举例说明:
#pragma pack(push) //保持对齐状态
#pragma pack(4) //设定为4字节对齐
strust test
{
char m1;
double m4;
int m3;
}
#pragma pack(pop) //恢复对齐状态