Eine Anwendung oder Bibliothek wird nach komplexen Typen, wie z. B. Programmen, Funktionsbausteinen, globalen Variablenlisten, Methoden, Aktionen, Strukturen usw. organisiert. Innerhalb jedes dieser Typen können Variablen definiert werden.
Wenn ein komplexer Typ, z. B. eine Funktion, eine Methode, eine Aktion, eine Eigenschaft Get, eine Eigenschaft Set oder ein Übergang, aufgerufen wird, wird Speicher im Stapel zur Ausführung der Methode benötigt. Die Informationen zur Stapelgröße ermöglichen die Identifizierung des komplexen Typs, der zu viel Speicher des Stapels beansprucht.
Für einen komplexen Typ wie eine Funktion oder Methode werden die Größen der Variablen addiert. Beim Aufruf des komplexen Typs wird die Größe am Stapelanfang zugewiesen und die Eingangswerte werden in den zugewiesenen Speicher kopiert. Bei der Codeausführung der Funktion oder Methode werden diese Speicherwerte verwendet.
Beispiel
Beispiel für die Berechnung der Stapelgröße:
FUNCTION_BLOCK FB_XXX
VAR
fbComplex: FB_Test; // 20 byte
END_VAR
// method call of FB_XXX
Meth1(TRUE);
METHOD Meth1
VAR_INPUT
xTest1: BOOL;
END_VARVAR
iTest2: INT;
END_VAR
METHOD METH2
VAR_INPUT
fbComp: FB_XXX;
END_VAR
Ergebnis der Metrik „Stack Size“
Stack Size (METH1) = 8
Stack Size (METH2) = 32