带有结构数组的结果的奇数sizeof

时间:2019-06-13 05:54:17

标签: c arrays struct sizeof

假设您有一个

构成的结构
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。

0 个答案:

没有答案