可能重复:
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机器上运行。
答案 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)
答案 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数组中的终结符。