Moin Zusammen,
@Silent:
Bei einem HugeString befindet sich auf den Bytes -8 bis -5 der Referenzzähler, und auf -4 bis -1 das Längenfeld des Strings (Werte relativ zu der Adresse in sHuge)
Deshalb -4, da dann auf das niederwertigste Byte des Längenfeldes adressiert wird.
Offsets relativ zu der Adresse in sHuge:
(Wert darunter in Hex, bezogen auf das Beispiel)
Code:
Referenzz. |Länge | Inhalt
-8 -7 -6 -5 | -4 -3 -2 -1 | 0 1 2 3 4 5 6
FF FF FF FF | 05 00 00 00 | 30 31 32 33 34 35 00
Hier hat der Referenzzähler den Wert -1, da sHuge direkt eine Stringkonstante zugewiesen wurde (sHuge := '01234'). Diese haben immer den Referenzzähler -1, da sie ihren Wert nicht verändern.
Wichtig ist hierbei noch, dass die bei Intel übliche Speicherreihenfolge Verwendung findet, also das niederwertigste Byte zuerst, das höchstwertigst zuletzt. Deshalb steht die 5 auf Offset -4.
Würdest Du also bei meinem Beispiel -5 statt -4 schreiben, müsste als Ergebnis 1535 (dezimal) herauskommen.
Code:
-5 -4 -3 -2
FF 05 00 00 => 000005FF Hex => 1535 Dez
und bei -3
Code:
-3 -2 -1 0
00 00 00 30 => 30000000 Hex => 805306368 Dez
@Duffy:
Das ist natürlich richtig, aber ich finde, dass es nicht schaden kann mal auf die Unterschiede der Stringtypen einzugehen.