Also von der Variante (4) würde ich ganz absehen, da es so aussieht als ob ein Objekt einer Klasse auf dem Heap erzeugt wird.
In Wirklichkeit wird ein Record auf dem Stack erzeugt (bzw der Speicher für den Record liegt auf dem Stack und der Record wird initialisiert).
Das Stimmt nur indirekt.
(beim Constructor weiß ich es jetzt nicht genau)
Aber bei der class-funktion wird das Result als Out-Parameter übergeben. (wenn der Record größer als 8 Byte ist oder Managed-Typen enthält, ansonsten wird er wie ein Int64 behandelt)
Es wird dürfte also direkt in den Speicherbereich der Variable geschrieben werden.
@Uwe: Entschuldigung.
Das liegt daran, daß die Funktionen in der System und SysInit oftmals anders heißen. Im Quellcode heißen die so. Im Delphi/Pascal-Code werden die anders benannt, beim Aufruf, und im
ASM heißen die manchmal nochmals anders.
Einige Funktion lassen sich auch nur von
ASM aus aufrufen, da sie im Pascal garnicht verlinkt sind. usw.
Finalize Initialize
FinalizeArray InitializeArray (Count=1 = Record)
Beispiel (siehe Stevie):
System.pas = _InitializeRecord
Pascal = Initialize
Assembler = @InitializeRecord