2

可能重复:
为什么结构的 sizeof 不等于每个成员的 sizeof 之和?

我无法理解 struct mem alloc。

typedef struct a{
} a;

sizeof(a) is 0

typedef struct b{
    int bb
} b;

sizeof(b) is 4

typedef struct b2{
    int *bbbb
} b2;

sizeof(b2) is 8

typedef struct d{
    int x;
    int *y;
} d;

sizeof(d) is 16!

为什么 sizeof 是 16?是 12 吗?(int+int point=4+8);

我猜 sizeof(int) 是 4,如果 int var in struct,mem 是 8?

4

4 回答 4

4

为什么 sizeof 是 16?是 12 吗?(int+int point=4+8);

由于指针在您的机器上是 8 字节宽,出于性能原因,编译器觉得有义务将其对齐到 8 字节边界。在某些架构上,它甚至可能不是严格的性能问题:对某些类型的未对齐访问可能是完全非法的。

换句话说,编译器可以在任何地方添加填充,除了结构的第一个元素之前

于 2012-09-09T16:43:59.420 回答
1

根据您使用的平台,sizeof(int *)可能是 4 或 8(或其他)。此外,如果需要,您的编译器可以自由地将未使用的填充字节添加到结构中。

于 2012-09-09T16:42:59.700 回答
0

这是由于填充和内存对齐。请参阅此链接以获取更多说明。

于 2012-09-09T16:43:44.413 回答
0

内存对齐在起作用。事情需要对齐。

于 2012-09-09T16:45:57.673 回答