sizeof(struct)返回的值比预期值小
sizeof(struct) returns a SMALLER than expected value?
我有这个c++结构:
struct Packet
{
uint32 MessageCount;
uint32 Length;
uint32 FieldValue;
union PacketHeader
{
uint32 typeInfo;
struct MagicVersion
{
uint8 MagicNumber[3];
uint8 Version;
};
};
Data * Payload(void) { return reinterpret_cast< Data * >(this + 1U); }
Data const * Payload(void) const { return reinterpret_cast< Data const * >(this + 1U); }
Packet * nextPacket(void) { return reinterpret_cast< Packet * >(this + 1U) + Length; }
Packet const * nextPacket(void) const { return reinterpret_cast< Packet const * >(this + 1U) + Length; }
};
然后MSVC++中的sizeof(Packet)
返回12,而不是我所期望的16。
奇怪的是,这当然比预期值要小。如果它更大,可能是因为结盟问题。
我错过了什么?
TIA
为什么你认为它应该更大?
它包含3个没有虚拟方法的uint32
,正好是12个字节。
联合不计算在内,因为它是一个类型,它不包含该类型的成员。
如果您希望您的类包含并集的一个实例,该实例包含结构的一个例子,那么您应该编写:
struct Packet
{
uint32 MessageCount;
uint32 Length;
uint32 FieldValue;
union
{
uint32 typeInfo;
struct
{
uint8 MagicNumber[3];
uint8 Version;
} /* MagicVersion */;
};
} /* PacketHeader */;
/**/
中的名称是可选的,可以指定也可以不指定。如果您这样做,则必须使用union
/struct
的名称来访问其成员,否则您将拥有一个平面Packet
结构。
相关文章:
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 什么时候在C++中返回常量引用是个好主意
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 你能重载对象变量名本身返回的内容吗
- 为什么 Serial.println(<char[]>);返回随机字符?
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 返回类型为struct的函数每次调用时都不返回任何内容
- 将C#struct传递给C 不受管理的DLL返回错误结果
- G 将函数返回struct的原型混淆为结构初始化器
- 如何从采用 int 和 struct 类型的指针的函数中取消引用指针返回的地址?
- 在SWIG中从c++函数返回Struct到Python
- 使用c#调用返回struct数组的非托管dll函数
- 在类函数中返回Struct指针
- 指针函数在类中返回Struct的值
- 将std::chrono::system_clock::time_point转换为struct timeval并返回
- 内存分配问题传递/返回Struct *数组
- 以struct作为键的映射返回不正确的值
- 返回c++中的Struct
- sizeof(struct)返回的值比预期值小
- Sizeof (struct)返回意外值