Das Problem mit dem Speicher beginnt ja schon beim Übergabeparameter.
Wenn dieser CONST ist, legt der Compiler ja automatisch eine Kopie in der Größe an.
Aber ohne CONST kann ich keine dynamische Übergabe kodieren:
MyFunc(Var1);
MyFunc('Text');
Problematisch wirds dann noch bei Rekursion und geschachtelten Funktionen.
Bifs sind intern wohl etwas anders kodiert.

Dynamisch geht es eigentlich nur per Pointer.
Allerdings muss die Aufrufkonvention genau eingehalten werden.

Beschränke dich doch einfach auf max. 32K-Variablen, das reicht in 99,999% aller Fälle.