gpt4 book ai didi

c - 为什么允许递归会使 C 在 8 位 CPU 上变慢/效率低下

转载 作者:行者123 更新时间:2023-12-01 23:59:21 24 4
gpt4 key购买 nike

this question about compiler efficiency 的答案对于 8 位 CPU,这似乎意味着允许递归 会使 C 语言在这些体系结构上效率低下。我不明白(同一函数的)递归函数调用与各种函数的重复函数调用有何不同。

我想明白为什么会这样(或者为什么貌似有学问的人会这么认为)。我猜想这些架构可能只是没有堆栈空间,或者 push/pop 效率低下 - 但这些只是猜测。

最佳答案

因为要有效地实现 C 堆栈,您需要能够有效地加载和存储到当前帧内的任意偏移量。例如,8086 处理器提供索引和基地址模式,允许在单个指令中加载堆栈变量。对于 6502,您只能使用 X 或 Y 寄存器执行此操作,并且由于这些是唯一的通用寄存器,因此为数据堆栈指针保留一个非常昂贵。 Z80 可以使用其 IX 或 IY 寄存器来执行此操作,但不能使用堆栈指针寄存器。然而,Z80 上的索引加载指令需要很长时间才能执行,所以它仍然很昂贵,而且你要么为堆栈指针保留第二个寄存器,要么必须在任何时候从 SP 寄存器加载堆栈指针想要访问变量。

相比之下,如果不支持递归调用,则当现有函数仍在进行中时,该函数的第二个实例无法在调用中启动。这意味着一次只需要一组变量,您只需为每个函数分配其自己的静态内存块以用于变量。由于内存具有固定位置,因此您可以使用固定地址加载。 Fortran 的一些实现使用了这种方法。

关于c - 为什么允许递归会使 C 在 8 位 CPU 上变慢/效率低下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62124003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com