c - 什么是 "stack thrash"?

标签 c embedded

什么是“堆栈颠簸”?还是“堆栈颠簸”? (因为我不知道定义,所以我不确定它是可数还是不可数。)

最佳答案

堆栈抖动类似于堆抖动,但在堆栈上。

好了,现在已经解释过了。

哦,你想要更多细节,对吗?

如果您在不是您的处理器上模拟基于堆栈的处理器,那么您就是在破坏堆栈。

如果您的 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/

相关文章:

programming-languages - F35 Lightning II飞机使用的主要编程语言是什么?

c - ATMega128 启动时输出闪烁

c - 写入文件

python - 二进制文件转python整数列表

c++ - 检索应用程序提供的所有 Python API 的列表

rust - 如何在 ARM 嵌入式 Rust 中使用更少的内存进行取模

c - 设计适用于嵌入式设备的极简数据存储的技巧

c - 如何编写设备的头文件

c - select() 和 read() 在串行端口读取时超时,但之前的 write() 成功?

c - 如何实现 IF 来检测文件读取时的最后一个字节?