在缺省情况下,编译器为了让程序跑得跟快,减少CPU读取数据的指令周期,对结构体的存储进行了优化,
比如:如下结构体
struct s
{
char ch;
int i;
};
虽然变量ch本身只有1个字节,但实际上却占用掉了4个字节,为的是让第二个int型成员i的地址能够被4整除。因此实际占用的是8个字节,sizeof(s) = 8。
一般地,可以通过下面的方法来改变缺省的对界条件:
使用伪指令#pragma pack (n),C编译器将按照n个字节对齐。
使用伪指令#pragma pack (),取消自定义字节对齐方式。
比如:如下结构体
#pragma pack(1)
struct s
{
char ch;
int i;
};
#pragma pack()
这样结构体实际占用了5个字节,sizeof(s)=5;