Es ist offensichtlich, dass das Problem die Speicherausrichtung ist.
Delphi-Quellcode:
TTest = record
case Typ:Boolean of
false: (T1 :Integer);
true: (T2 :Double);
end;
- TTest wird je nach Compilerschalter gerade ausgerichtet (Startadresse)
- Typ (Boolean) ist 1Byte lang (wäre es ein Aufzählungstyp, dann auch 1Byte, es sei denn man aktiviert {$Z4} (4Bytes))
- Es folgt speicherüberlappend T1 (4Bytes lang) und T2 (8Bytes lang) -> nur warum nicht an der gleichen Anfangsadresse???
@Nico Bendlin
Der Code in C++ sieht wie folgt aus (wenn ich mich nicht irre)
Code:
struct {
Bool Typ;
union {
int T1;
double T2;
};
} TTest;
Jedenfalls ist hier die Adresse von T1 == Adresse von T2!
Siehe hierzu:
MSDN Figure 8.1 Storage of Data in NumericType Union