Auszug aus der
System.pas:
Delphi-Quellcode:
procedure _DynArrayLength;
asm
{ FUNCTION _DynArrayLength(const a: array of ...): Longint; }
{ ->EAX Pointer to array or nil }
{ <-EAX High bound of array + 1 or 0 }
TEST EAX,EAX
JZ @@skip
MOV EAX,[EAX-4]
@@skip:
end;
Interessant ist hier nur die Zeile mit dem MOV-Befehl. Er packt in das Ausgaberegister den Wert, auf den der
Array-Pointer - 4 zeigt.
Sprich:
Die Länge wird direkt vor den Daten, auf die der Pointer zeigt, gespeichert.
Es handelt sich also nur um einen Pointer und keinen Record.