首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么允许递归会使C在8位CPUs上慢/低效率?

为什么允许递归会使C在8位CPUs上慢/低效率?
EN

Stack Overflow用户
提问于 2020-06-01 00:20:29
回答 1查看 86关注 0票数 2

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

我想了解为什么会这样(或者为什么看起来很有学问的人会这么认为)。我可以猜测,这些架构可能只是没有堆栈空间,或者push/pop效率低下--但这些只是猜测。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-01 00:30:58

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

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62124003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档