为什么这个结构12的大小而不是10?

时间:2012-03-14 05:14:53

标签: c++ struct

  

可能重复:
  Why isn't sizeof for a struct equal to the sum of sizeof of each member?

我正在尝试解析ID3v2标签,至少获取艺术家,标题和专辑等重要数据,但我在设置必要的结构时遇到了麻烦。

struct ID3v2_frame{
  char id[4];
  unsigned int size;
  bool flags[2];
};
ID3v2_frame frame;
cout<<sizeof(frame)<<endl;

我认为如何设置一个4字节的int是一个问题。 当我输出sizeof(帧)时输出12,我的预期输出为10。 我正在64位Linux机器上运行。

5 个答案:

答案 0 :(得分:0)

请检查您的主程序:

sizeof(bool) //should return 2 my guess
sizeof(char) //should return 1
sizeof(unsigned int) //should return 4

每个编译器可以具有不同的数据类型大小。

答案 1 :(得分:0)

注意x64上的bool大小是2个字节

答案 2 :(得分:0)

您可以从herehere找到答案。

请检查什么包装?默认包装(8)

答案 3 :(得分:0)

这是因为结构包装。编译器会使结构的大小为4个字节的倍数。如果您不希望这种情况发生,并且在您的情况下将大小视为10个字节,请使用__attribute__((packed))

struct ID3v2_frame{
char id[4];
unsigned int size;
bool flags[2];
}__attribute__((packed));

请注意,这可能会影响程序的性能。看到这个问题:

Can __attribute__((packed)) affect the performance of a program?

答案 4 :(得分:-1)

我的猜测是flags和id数组中的终结符。