为什么包装对象的大小低于预期
Why is the sizeof for a packed object lower than anticipated?
我有以下代码:
#pragma pack(push, 4)
class C {
public:
char a;
char b;
short c;
char d;
};
C e;
我不明白为什么sizeof(e)
是6。我以为sizeof(e)
将是 8 => 1(a) + 1(b) + 2(c) + 1(d) + 3(对齐)
包装指令设置对齐的上限,而不是最小值。C
的对齐要求仅为 2,因此将对齐上限降低到 4 对它没有影响。
如果您打算增加对齐方式,则可以改用alignas
(这恰好是标准功能,与打包不同)。
但是,为什么填充是数字除以 2 而不是 2 的幂?
因为对象的大小只需要是该对象对齐方式的倍数。正是这种对齐必须是 2 的幂。
相关文章:
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 如何在c++17中制作一个模板包装器/装饰器
- std::vector的包装器,使数组的结构看起来像结构的数组
- c++r值引用应用于函数指针
- 如何在c++迭代器类型中包装std::chrono
- 如果编译的源代码是特定于它编译的硬件的,我们如何分发它
- 如何修复函数样式强制转换或类型构造的预期"("?
- 是否可以用"iostream"包装现有的TCP/OOpenSSL会话
- 如何仅使用对象名称打印特定于对象的成员
- 相当于LocaleMatcher的ICU4C
- 如何创建独立于平台的宏来包装编译器扩展?
- C++:读取.BMP文件时出现问题;文件结束时间早于预期
- 为什么包装对象的大小低于预期
- 是否有适用于张量流对象检测 API 的C++包装器
- C++ - 错误:为 OpenCV 的 cv::标量::all 创建 C 包装器时出现预期的类型说明符
- 如何创建一个同时适用于多种语言的包装器
- 函数包装器,适用于所有类型的函数,无需强制转换
- 包装结构没有预期的大小
- 如何仅使用直接 WinAPI 将独立于设备的位图放入 Windows 剪贴板?(无 MFC 或其他包装器)