比较简单的内存对齐的问题,帮忙下...

来源:百度知道 编辑:UC知道 时间:2024/05/25 10:40:04
比较简单的内存对齐的问题,帮忙下...
#pragma pack(4)
struct test_t {
int a; /* 存放位置区间[0,3] */
char b; /* 存放位置区间[4] */
short c; /* 存放位置区间[6,7] */
char d; /* 存放位置区间[8] */
};

为什么c 的存储位置空间不是 [8,9]或者 [5,6]...
知道的麻烦说下了,谢谢..
谢谢.gzlu...
偶还有点不太明白
不过结构体内的四个成员大小(依次为4,1,2,1)的整数倍应该是4...pack也是4...

对齐c的时候 为什么是两字节的边界呢...

因为c是两字节,所以只需要对齐在两字节边界上。

编译器在对齐的时候是看成员的大小的整数倍以及#pragma pack中写的数字的整数倍中较小的一个。

再细谈一下吧:

对齐是从结构头开始一个一个看的。首先看a,占四个字节。再看b,占一个字节。接着看c,c是两个字节大小,#pragma pack中写的是4,所以这里按c的大小来对齐(取两者之中较小的),因此在c之前空一个字节再放c。