为什么不同结构尺寸的输出是一样的?

时间:2012-10-19 19:31:07

标签: c++

  

可能重复:
  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?

2 个答案:

答案 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个字节。