C语言 函数和机器命令的激活记录,用于从堆栈中释放参数



我在课堂上遇到了问题。这个问题说,在 C 中,调用者函数负责在从被调用方返回后从堆栈中删除参数,而 Pascal 中被调用者负责从堆栈中删除参数。这个问题说 Pascal 删除参数的方式比 C 更有效,我们被问到为什么会这样。我们得到了线索 - 考虑从函数返回的机器命令。所以我认为 - 据我所知,在汇编中,您可以将堆栈指针更改为指向在准备函数激活中插入堆栈的第一个参数。所以如果是这样,C 和 Pascal 都不会更有效率。是吗?

他们试图得到的可能是x86有一个专门的RET x指令,在返回时还会从堆栈中删除x字节的参数。显然,这在其他体系结构上可能有所不同,甚至调用约定也可能不同。

请注意,如果您的函数使用局部变量,您可以将函数参数折叠到其中,以便使用 C 调用约定的速度相同,如果不是更快的话。

相关内容

  • 没有找到相关文章

最新更新