发布于 2019-11-28 22:56:01
..。这让我想知道是否有任何系统/体系结构来定义没有调用堆栈的虚拟机。
延拓传递方式为所有函数调用启用了尾叫优化,因此不需要堆栈;但是,堆内存很可能用于保存捕获对局部变量的引用的闭包。
CPS在某些编译器中用作中间形式(例如,在虚拟指令集中),以表示显式控制流,特别是在异常和异常处理中发生的情况。
堆栈是一种非常有效的数据结构:堆栈的顶部几乎肯定在数据缓存中,而且分配和取消分配是超级快(即一条指令). --堆栈是C程序的必要部分,因此,如果没有对堆栈的显式支持,现代计算机就不太可能制造。
但是,要明确的是,MIPS和RISC V没有单独的硬件--专用的堆栈指针或推送和弹出指令--软件只是这样使用多种通用寄存器之一。
发布于 2019-11-29 06:30:13
我不认为健壮性是一个问题。功能是,在最字面意义上。
暂时忘记实现细节,真正考虑一下调用堆栈是什么。它允许您调用子程序(函数),并从它们返回,继续您停止的地方。也就是说,它提供了将问题分成更小部分、创建功能构建块的可能性。
这是通用解决问题机器的一个基本特性,没有它就很难想象。这将是无用的,因为没有办法创造任何复杂的东西。
发布于 2019-12-02 09:32:44
你所说的“健壮”是一个偏好的问题。
堆栈是有用的,但是体系结构没有必要直接定义它们。
如果程序想要的话,它们总是可以建立自己的堆栈。
对某些东西的硬件支持使其速度更快,但不太灵活。
具有调用堆栈的体系结构使函数调用速度快,但速度不快,因为通常与参数传递有关。
另一方面,在函数调用和返回方面,您被锁定在最后一个先到先出的世界中。如果您想使用协同机制,堆栈将不再帮助您。
我们拥有的硬件会影响我们编写的程序。我们编写的程序会影响我们想要的硬件。最后,我们所拥有的似乎是“必要的”,即使这只是众多选择中的一个。
https://softwareengineering.stackexchange.com/questions/401782
复制相似问题