sizeof(struct)返回的SMALLER小于预期值吗?

nas*_*ass -1 c++ struct sizeof

我有这个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; }
};
Run Code Online (Sandbox Code Playgroud)

然后sizeof(Packet)在MSVC++中返回12而不是16,这是我所期望的.

奇怪的是,这比预期值小.如果它更大可能是因为对齐问题.

我错过了什么?

TIA

Dut*_*tow 10

为什么你认为它应该更大?

它包含3个uint32没有虚拟方法,正好是12个字节.

联合不计,因为它是一个类型,它不包含该类型的成员.

如果您希望您的类包含union的单个实例,其中包含结构的单个实例,您应该写:

struct Packet
{
    uint32 MessageCount; 
    uint32 Length; 
    uint32 FieldValue;

    union
    {
        uint32 typeInfo; 
        struct
        {
            uint8 MagicNumber[3];
            uint8 Version; 
        } /* MagicVersion */;
     };
} /* PacketHeader */;
Run Code Online (Sandbox Code Playgroud)

其中的名称/**/是可选的,您可以指定它们.如果你这样做,你必须使用union/ 的名称访问他们的成员struct,否则你将有一个扁平的Packet结构.