Ich habe diese C++ Struktur:sizeof (struct) gibt einen KLEINEREN als erwarteten Wert zurück?
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; }
};
Dann sizeof(Packet)
in MSVC++ liefert 12 statt 16, das ist das, was ich erwarte.
Das Seltsame ist natürlich, dass dies kleiner ist als der erwartete Wert. Wäre es größer gewesen, könnte das an Ausrichtungsproblemen liegen.
Was fehlt mir?
TIA
Beachten Sie, dass Sie diese Union nicht verwenden sollten, um zwischen uint32_t und uint8_t []; das ist UB. – lorro