4

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

struct s {
               char c;
               int i
}

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

4

3 回答 3

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 个字节

于 2012-08-29T13:54:04.347 回答
2

sizeof 返回实际的结构大小。

没有padding的大小有点无意义,因为编译器会插入自己觉得合适的padding。一些编译器支持关闭结构填充的编译指示,在这种情况下你应该使用它,但你可能会得到各种有趣的事情发生。

于 2012-08-29T13:54:32.780 回答
0

您误解了文档。

使用 sizeof 返回对齐后的字节数

这是不正确的。返回paddingsizeof之后的字节数,这不是一回事。

因此,如果您想知道“我的结构将占用多少空间”,sizeof()那么就是告诉您正确的答案。

于 2012-08-29T15:08:14.453 回答