单杆件结构的对齐和尺寸保证
Alignment and size guarantees for single member structs
给定一个(可能-非 POD)struct
,只有一个成员,没有继承,也没有虚拟方法:
struct Foo {
Bar value;
Foo() { /* do something */ }
};
C++是否保证Foo
具有与Bar
相同的对齐和sizeof
?如果没有,那么可以给出什么保证?当我Bar
修复为特定类型(POD,基本类型,...)时,是否可以提供一些保证?
没有这样的保证。特别是,编译器可能会在value
成员的末尾填充。它们不必具有相同的对齐要求。
您可以保证
-
第一个成员
value
的地址与结构的地址相同。 -
sizeof(Foo)
不小于sizeof(Bar)
(否则指针算术会严重中断)。
相关文章:
- OPENCL结构对齐错误
- 数据结构对齐:为什么Char和STD :: String的数组不同
- interpret_cast和结构对齐
- 结构对齐填充、最大填充大小和结构成员顺序
- 与此类结构对齐是否以C 标准为标准
- 64位Windows API结构对齐导致命名管道上出现“拒绝访问”错误
- 如何检测/查找 64 位结构对齐问题
- 检索数据结构对齐信息
- C# 中的结构对齐
- 视觉C++中的结构对齐
- 为什么iOS中的结构对齐方式不同
- 内存对齐-结构的总大小是结构对齐的倍数,而不是处理大小
- 内存对齐到结构-对齐大小等于最大成员大小
- 结构对齐 C/C++
- C与C++结构对齐
- 警告 C4121 行为和结构对齐 (Visual Studio 2010)
- C/C++ 中的对象/结构对齐
- #pragma pack,模板类型和结构对齐
- Fscanf和结构对齐
- c++中的结构对齐和填充