Unions in C #: Strukturelemente scheinen nicht ausgerichtet zu sein

8

Ich habe folgende Strukturen definiert, um eine C ++ - Union zu emulieren (die schließlich für C ++ Interop verwendet wird):

%Vor%

Ich habe den folgenden Testcode geschrieben, der Struct1.guid einen Wert zuweist und auf Struct2.guid auf Gleichheit testet:

%Vor%

Warum ist Struct2.guid nicht gleich Struct1.guid und stattdessen scheint sich ein Segment von Struct2.guid in Struct2.integer zu verschieben? Alle Strukturelemente, IMO, scheinen ausgerichtet zu sein.

    
LJ VanKuiken 24.12.2012, 18:14
quelle

1 Antwort

8

LayoutKind.Sequential wirkt sich nur auf die nicht verwaltete Darstellung dieser Struktur aus. Dies liegt daran, dass die Struktur nicht blitable Typen (Strings) enthält.
Wenn nur Bleitypen vorhanden wären, würde LayoutKind.Sequential sowohl die verwaltete als auch die nicht verwaltete Darstellung steuern ( Referenz ).

In Ihrem Fall entscheidet der Compiler, die Ganzzahl vor die beiden Zeichenfolgen in der verwalteten Darstellung zu setzen (Sie können sehen, dass wenn Sie beim Debuggen ms und STRUCT2 entfalten).

Sie können das beheben, indem Sie LayoutKind.Explicit sowohl in STRUCT1 als auch in STRUCT2 verwenden, da Explicit sowohl gemanagte als auch nicht verwaltete Darstellungen sowohl für blitable als auch nicht-blitable Typen betrifft.

    
GSerg 24.12.2012, 18:58
quelle

Tags und Links