我怎样才能知道实际的结构尺寸?使用 sizeof 返回对齐后的字节数。例如 :
struct s {
char c;
int i
}
sizeof(s) = 8; 我有兴趣获得没有对齐的字节大小,即 5
结构体的实际大小是对齐后的结构体大小。我的意思是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 个字节
sizeof 返回实际的结构大小。
没有padding的大小有点无意义,因为编译器会插入自己觉得合适的padding。一些编译器支持关闭结构填充的编译指示,在这种情况下你应该使用它,但你可能会得到各种有趣的事情发生。
您误解了文档。
使用 sizeof 返回对齐后的字节数
这是不正确的。返回paddingsizeof
之后的字节数,这不是一回事。
因此,如果您想知道“我的结构将占用多少空间”,sizeof()
那么就是告诉您正确的答案。