Stack-Größe [Anzahl Bytes]

Titel Kurzform

Stack-Größe

Kategorien

Informativ, Effizienz, Verlässlichkeit

Definition

Anzahl der Bytes, die für den Aufruf einer Funktion oder eines Funktionsbausteins benötigt werden

Weitere Informationen

Eingangsvariablen und Ausgangsvariablen werden am Speicher ausgerichtet. Dadurch kann eine Lücke zwischen diesen Variablen und den lokalen Variablen entstehen. Diese Lücke wird mitgezählt.

Rückgabewerte von aufgerufenen Funktionen, die nicht in ein Register passen, werden auf den Stack geschoben. Der größte dieser Werte bestimmt den zusätzlich zugewiesenen Speicher, der ebenfalls mitzählt. Funktionen oder Funktionsbausteine, die innerhalb der betrachteten POUs aufgerufen werden, haben ihren eigenen Stack-Frame. Deshalb zählt der Speicher für solche Aufrufe nicht mit.

Je nach verwendetem Codegenerator verwenden auch Zwischenergebnisse von Berechnungen den Stapel. Diese Ergebnisse werden nicht gezählt.

Beispiel:

FUNCTION F_Sample : INT
VAR_INPUT
    a,b   : INT;
END_VAR
VAR
    c,d,e : INT;
END_VAR
VAR_STAT
    f,g,h : INT;
END_VAR
c := b;
d := a;
e := a + b;

Annahme: Für die Berechnung wird die Solution-Plattform „TwinCAT RT (x86)“ verwendet. Das Gerät besitzt ein Stack-Alignment von 4 Byte, wodurch zwischen den Variablen Lücken entstehen können.

Die gesamte Stack-Größe von F_Sample beträgt 16 Byte und setzt sich zusammen aus:

VAR_STAT wird nicht auf dem Stack gespeichert und erhöht daher nicht die Stack-Größe einer POU.