next up previous
Nächste Seite: Kontrollcode Aufwärts: Laufzeitumgebung Vorherige Seite: Adressierung der Parameter


Offene Feldparameter

Eine Ausnahme von der oben beschriebenen Regel tritt bei offenen Feldparametern ein. Da nicht von vornherein bekannt ist, wie gross das Feld beim Aufruf ist, kann nicht der Inhalt der Variablen auf den Stack kopiert werden, da die Prozedur sonst nicht wüsste, wie sie die nachfolgenden Parameter adressieren sollte. Es wird in diesem Fall ein 8 Byte grosser Deskriptor auf den Stack kopiert. Dieser enthält den Wert von HIGH und die Adresse der Variablen. liegt als Langwort auf der höheren Adresse. Wenn es sich um einen Werteparameter handelt, kopiert die Prozedur die Variable, an die geretteten Register anschliessend, auf den Stack und passt den Deskriptor entsprechend an, sodass die Adresse nunmehr auf die Kopie zeigt. Die Kopie von offenen Feldern kann durch die Option

(*$ CopyDyn:=FALSE *)
vor der Prozedur für diese einzelne Prozedur ausgeschaltet werden, was bewirkt, dass der Werteparameter wie ein VAR-Parameter behandelt wird, was Code, Stack und Laufzeit spart. Dies sollte man aber nur tun, wenn der Parameter wirklich nicht verändert wird.



Claudio Nieder 2000-11-12