实际结构大小

时间:2012-08-29 13:48:26

标签: c++ alignment sizeof

我如何知道实际的结构尺寸? 使用sizeof返回对齐后的字节数。 例如:

struct s {
               char c;
               int i
}

sizeof(s)= 8; 我有兴趣得到没有对齐的字节大小,即5

3 个答案:

答案 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()会告诉你正确答案。