假设您有一个
构成的结构struct s {
long a, b, c, d;
int e, f, g;
char h;
};
您采用了这些结构的8个数组
struct s mys[8];
数组初始化为
#define INITIALISE(x) memset((void *)&x, 0x00, sizeof(x));
sizeof正确评估为 4 * long + 3 * int + char = 4 * 8 + 3 * 4 + 1 = 45
所以数组的总大小为8 * 45 = 360
printf("%d", sizeof(mys))
输出:360
但是,当我调试gdb(8.3版)的代码时 mys [7]的最后一个成员未初始化。
在gdb上:
p sizeof(mys)
输出为384 比360多一点。 字节“多余”未初始化。
现在,我知道此问题与打包和对齐有关,但是我将头撞在墙上一个下午,我不知道如何获得“正确的”尺寸。
尝试如下:
使用
#pragma align
#pragma pack
是在编译器级别还是在链接器级别? 请注意,由于我正在测试它,因此我无法修改该代码,因此不得触摸该代码。
我正在使用WSL。