我们对自定义数据类型sizeof获取大小时,并不是每个成员的大小进行累加,操作系统为了便于内存访问,往往以成员所占大小最大的成员进行对齐。
比如
struct test
{
char c;
double d;
};
我们可以通过#pragma pack(n) n为对齐参数进行调整,直接贴代码
#include
#pragma pack(1) //设置对齐对齐参数为1 及一字节对齐
struct Test
{
char c;
long lValue;
};
#pragma pack() //恢复系统默认对齐参数
struct TestContrast
{
char c;
long lValue;
};
int main(int argc, const char *argv[])
{
printf("One Byte Alignment:%d\n", sizeof(struct Test));
printf("System default Alignment:%d\n", sizeof(struct TestContrast));
return 0;
}