0

可能重复:
结构填充

程序如下:

#include <iostream>

using namespace std;

struct node1 {
    int id;
    char name[4];
};

struct node2 {
    int id;
    char name[3];
};

int
main(int argc, char* argv[])
{
    cout << sizeof(struct node1) << endl;
    cout << sizeof(struct node2) << endl;
    return 0;
}

并且编译器是g++ (GCC) 4.6.3. 输出是:

8
8

我真的不明白为什么会这样。为什么输出sizeof(struct node2)不是7?

4

2 回答 2

4

这是因为结构在边界处对齐。通常为 4 个字节(尽管可以更改) - 这意味着结构中的每个元素至少为 4 个字节,如果任何元素的大小小于 4 个字节,则在最后添加填充。

因此两者都是 8 个字节。

size of int = 4
size of char = 1 
size of char array of 3 elements = 3

total size = 7, padding added (because of boundary) = +1 byte

for second structure:

sizeof int = 4
sizeof char = 1
sizeof char array of 4 elements = 4

total size = 8. no padding required. 
于 2012-10-19T19:34:07.990 回答
1
because of Packing and byte alignment<br/>

一般的答案是编译器可以自由地在成员之间添加填充以用于对齐目的。或者我们可以这样说,您可能有一个编译器将所有内容对齐到 8 个字节。

于 2012-10-19T19:36:39.093 回答