sizeof(struct)返回的值比预期值小

sizeof(struct) returns a SMALLER than expected value?

本文关键字:struct 返回 sizeof      更新时间:2023-10-16

我有这个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结构。