c++ - 实际结构尺寸

标签 c++ alignment sizeof

我怎样才能知道实际的结构尺寸? 使用 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 字节

关于c++ - 实际结构尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12179481/

相关文章:

c++ - 引用在堆栈上使用了多少内存

c++ - 在不同机器上使用二进制文件时出现共享对象错误

html - 可拖动对象对齐

html - 具有两个跨度的列表项左右对齐

c - sizeof() 显示不同的输出

c - ARM cortex-M3 uint_fast32_t 与 uint32_t

C++:临时参数的生命周期?

c++ - 为什么 `S x({})` 仅在 GCC 7/C++1z 模式下调用默认构造函数?

单元格中的 CSS 水平菜单对齐方式

c++ - Sizeof 在模板中失败,即使类型都已定义