我正在尝试使用 C++ 中的位域来实现特定的类大小,但由于某种原因,它比我预期的要大。
问题是,一个 32 位(4 个字节)的类报告(当作为参数传递给sizeof
5 个字节时)。示例类如下:
typedef unsigned char u8;
typedef unsigned int u32;
class Test {
u8 four_bit_field : 4;
u8 eight_bit_field;
u32 twenty_bit_field : 20;
}__attribute__((packed));
如果four_bit_field
和eight_bit_field
位置被切换,则sizeof
返回正确的大小,4 字节。我相信这可能是内存对齐问题。
那么,有人知道这种行为背后的原因吗?而且,最重要的是,如何在不切换任何位置的情况下解决此问题。