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

Why is the size of this struct 12 and not 10?

本文关键字:结构 为什么      更新时间:2023-10-16

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

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

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

我想这是一个如何设置4字节int的问题。当我输出sizeof(frame)时,它输出12,我的预期输出是10。我在一台64位linux机器上运行。

请检查您的主程序:

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

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

注意x64上的布尔大小为2字节

您可以从这里或这里找到答案。

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

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

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

请注意,这可能会影响程序的性能。请参阅此SO问题:

__attribute__((压缩))会影响程序的性能吗?

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

相关文章: