Einzelnen Beitrag anzeigen

ma2xx

Registriert seit: 25. Nov 2005
22 Beiträge
 
#12

Re: Zugriff auf Variante Teile in Record-Typen

  Alt 25. Nov 2005, 16:25
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
  Mit Zitat antworten Zitat