为什么 c++ 空类没有字节对齐?
Why c++ empty class have no byte alignment?
>我最近了解到空类的大小为 1 而不是零。为什么它没有字节对齐,其中 在 4 位环境中它的大小应该是 32 ?下一个对象的地址是什么?
因为C++根本不保证变量的 4 字节对齐或单词对齐。如果这对您很重要,您可以使用alignas
指定对齐要求:
struct alignas(4) my_empty_struct {};
现在,my_empty_struct
变量的地址将是 4 的倍数 - 显然,它的大小也是如此。
或者,您可以自己用虚拟字段填充结构以进行对齐。alignas
有点像填充了一个无法访问的字段。
相关文章:
- 运行时错误:引用绑定到类型"int"的未对齐地址0xbebebebebebebec6,这需要 4 个字节对齐 (stl_vector.h)
- 为什么 c++ 空类没有字节对齐?
- 为什么动态分配的内存总是16字节对齐
- 使用字节数组具有单字节对齐方式的结构是否安全
- libc++ 的 std::basic_string 的 16 字节对齐模式背后的原因是什么?
- 如何创建 std::vector of char/std::byte,其中第一个字节对齐到 16 个字节,但没有填充
- _declSpec(Align(16))不将指针与16个字节对齐
- 如何迫使新操作员返回的指针将是32字节对齐
- 16字节对齐AAC编码数据
- 正确处理字节对齐问题 - 通过UDP在16位嵌入式系统和32位桌面之间
- c++堆分配默认为32字节对齐
- x86-64上检查指针范围是否跨越N字节对齐地址的最快方法
- 字节对齐与C++中的第三方库冲突
- 位图应该是 2 字节还是 4 字节对齐
- C++ 4 字节对齐的数据
- 如果浮点值是16字节对齐的,是否可以将其直接转换为__m128
- 1字节对齐可能导致内存损坏
- 16 字节对齐问题
- 有没有办法创建一个可以作为参数传递的 16 字节对齐类
- xcode中的对象字节对齐