可能重复:
结果大小不符合结果
我有这个C++结构:
struct bmp_header {
//bitmap file header (14 bytes)
char Sign1,Sign2; //2
unsigned int File_Size; //4
unsigned int Reserved_Dword; //4
unsigned int Data_Offset; //4
//bitmap info header (16 bytes)
unsigned int Dib_Info_Size; //4
unsigned int Image_Width; //4
unsigned int Image_Height; //4
unsigned short Planes; //2
unsigned short Bits; //2
};
Run Code Online (Sandbox Code Playgroud)
它应该是30个字节,但'sizeof(bmp_header)'给我值32.什么错了?
原因是因为填充.如果你把char
s放在结构的末尾,sizeof
可能会给你30个字节.整数通常存储在4的倍数的存储器地址中.因此,由于字符占用2个字节,因此它与第一个unsigned int之间有两个未使用的字节. char
不像int
,通常不会填充.
一般来说,如果空间是一个大问题,请始终订购structs
从最大到最小的元素.
请注意,填充并不总是(或通常)sizeof(element)
.这是巧合,int
在4个字节char
上对齐并在1个字节上对齐.