实际结构大小

Yak*_*kov 4 c++ sizeof alignment

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

struct s {
               char c;
               int i
}
Run Code Online (Sandbox Code Playgroud)

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

Big*_*oss 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
Run Code Online (Sandbox Code Playgroud)

现在sizeof(byte_aligned)返回5并且实际上在内存中有5个字节