可能重复:
Struct Padding
该计划如下:
#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?
答案 0 :(得分: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.
答案 1 :(得分:1)
because of Packing and byte alignment<br/>
一般的答案是编译器可以在成员之间自由添加填充以便进行对齐。 或者我们可以说,你可能有一个编译器将所有内容对齐到8个字节。