让我意想不到的转折:
struct frame_head
{
unsigned size : 24;
unsigned height : 12;
unsigned width : 12;
unsigned pts : 15;
bool key : 1;
};
printf("%d\n", sizeof(frame_head)); // 12... Но почему не 8???
如果仅订购 64 位 / 8 个字节,为什么 GNU g++ 还需要 4 个字节?
因为包装是这样工作的:
回应第一条评论:
告诉编译器所有字段都被打包到一个 64 位的内存位置——内存位置,如果非零长度的字段的整个序列适合一个,它们就会占用它。高度字段不适合无符号 -32 位字并占用一个新字。最好使用具有保证大小的类型 - uint64_t 等。