因为要有效地实现 C 堆栈,您需要能够有效地加载和存储到当前帧内的任意偏移量。例如,8086 处理器提供了索引和基于地址模式,允许在单个指令中加载堆栈变量。使用 6502,您只能使用 X 或 Y 寄存器执行此操作,而且由于这些是唯一的通用寄存器,因此为数据堆栈指针保留一个的成本非常高。Z80 可以使用其 IX 或 IY 寄存器执行此操作,但不能使用堆栈指针寄存器执行此操作。然而,Z80 上的索引加载指令需要很长时间来执行,所以它仍然很昂贵,而且你要么为堆栈指针保留第二个寄存器,要么必须在任何时候从 SP 寄存器加载堆栈指针想要访问变量。
相比之下,如果不支持递归调用,则该函数的第二个实例无法在调用内部启动,而现有实例仍在进行中。这意味着一次只需要一组变量,您可以为每个函数分配自己的静态内存用于变量。由于内存具有固定位置,因此您可以使用固定地址加载。Fortran 的一些实现使用了这种方法。