我如何知道实际的结构尺寸? 使用sizeof返回对齐后的字节数。 例如:
struct s {
char c;
int i
}
sizeof(s)= 8; 我有兴趣得到没有对齐的字节大小,即5
答案 0 :(得分:8)
结构的实际尺寸是对齐后的结构尺寸。我的意思是sizeof
返回内存中结构的大小。如果你想拥有一个在字节上对齐的结构,你应该告诉编译器这样做。例如:
#ifdef _MSVC
# pragma pack(push)
# pragma pack(1)
# define PACKED
#else
# define PACKED __attribute((packed))
#endif
struct byte_aligned {
char c;
int i;
} PACKED;
#ifdef _MSVC
# pragma pack(pop)
#endif
现在sizeof(byte_aligned)
返回5,其实际内存为5个字节
答案 1 :(得分:3)
sizeof返回实际的结构大小。
没有填充的大小有点无意义,因为编译器将插入它认为合适的填充。有些编译器支持关闭结构填充的编译指示,在这种情况下你应该使用它,但你可能会发生各种有趣的事情。
答案 2 :(得分:0)
您误解了文档。
使用sizeof返回对齐后的字节数
这是不正确的。 sizeof
返回填充后的字节数,这不是一回事。
因此,如果你想知道的是“我的结构会占用多少空间”,sizeof()
会告诉你正确答案。