什么是“堆栈颠簸”?还是“堆栈颠簸”? (因为我不知道定义,所以我不确定它是可数还是不可数。)
最佳答案
堆栈抖动类似于堆抖动,但在堆栈上。
好了,现在已经解释过了。
哦,你想要更多细节,对吗?
如果您在不是您的处理器上模拟基于堆栈的处理器,那么您就是在破坏堆栈。
如果您的 C 代码 malloc 和 free 每隔一行代码,那么您就是在破坏堆。
堆栈抖动问题的要点是,如果您分析代码,CPU 几乎所有的时间都花在了弹出和推送上。
对于堆颠簸,malloc() 和 free() 是您最常用的 #1 和 #2 函数。
现在一些 CPU(rockwell 制造的)实际上经过优化以在硬件中运行基于堆栈的语言。
- 在 CPU 内部缓存顶部 N kb 堆栈的内部 ram
- 很少注册
- 所有指令堆栈相关
奇怪的是,Java 虚拟机是一个基于堆栈的模型。
在 x86 硬件上运行一个非常愚蠢的 FORTH 实现会破坏堆栈。 阅读 Forth 规范后你可能会写的那种东西,所以你为 forth 指令发出 x86 机器代码并且不要优化它。伙计们,我很抱歉,我知道你们的实现要好得多。
Postscript 也是基于堆栈的,这使得早期的 postscript 打印机令人兴奋:它们的 ram 有限且 CPU 速度较慢:并且运行一种堆栈颠簸的语言。我敢肯定,为了让它运行得更好,我们付出了很多努力,比如最初的 Apple Laserwriter。 它有一个以(10 左右)兆赫兹运行的摩托罗拉 68000 CPU 和 1Mb 的 ram IIRC。
再次,堆叠 thrashers。
有帮助吗?
关于c - 什么是 "stack thrash"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2258579/