C “什么是”呢;堆栈鞭打“;?

C “什么是”呢;堆栈鞭打“;?,c,embedded,C,Embedded,什么是“堆叠打击”?还是“一堆鞭打”?(因为我不知道它的定义,所以我不确定它是可数的还是不可数的。)我从来没有遇到过这个词,谷歌和维基百科的热门搜索也没有描述它 然而,它似乎类似于磁盘,磁盘的使用效率很低。这并不直接适用于不符合任何机械要求的堆栈。也许这与页面错误有关,这将导致机械效率低下的关系。或者通过一些昂贵的执行/内核补救措施纠正堆栈溢出 该术语的一些上下文可能会有所帮助。我在Forth的上下文中看到过这个术语,在Forth的上下文中,缺少堆栈帧访问有时需要过度使用堆栈操作(“抖动堆栈”)

什么是“堆叠打击”?还是“一堆鞭打”?(因为我不知道它的定义,所以我不确定它是可数的还是不可数的。)

我从来没有遇到过这个词,谷歌和维基百科的热门搜索也没有描述它

然而,它似乎类似于磁盘,磁盘的使用效率很低。这并不直接适用于不符合任何机械要求的堆栈。也许这与页面错误有关,这将导致机械效率低下的关系。或者通过一些昂贵的执行/内核补救措施纠正堆栈溢出


该术语的一些上下文可能会有所帮助。

我在Forth的上下文中看到过这个术语,在Forth的上下文中,缺少堆栈帧访问有时需要过度使用堆栈操作(“抖动堆栈”)才能到达堆栈顶部的某些字

此外,还将其定义为“频繁的堆栈扩展(溢出)和收缩(下溢)”。这显然是一个需要进一步解释的定义。也许更熟悉克雷X1的人可以解释

我在stack guards的上下文中听到了术语“stack thrashing”,但我认为它更常被称为“stack smashing”。堆栈破坏是指任何类型的利用堆栈漏洞(如)。这就是为什么GCC堆栈保护被称为SSP()。

我曾经听到过“破坏堆栈”(没有第一个h)的意思,即“破坏堆栈”,例如,当一个函数从堆栈中获取/放入的字节数超过它应该得到的字节数时,会弄乱堆栈指针,使另一个函数此后无法正常工作


当您使用错误的调用约定调用外部函数时(例如,当dll中的函数是stdcall但您将其声明为cdecl时),或者当您调用可变函数(如printf或scanf)时传递错误的格式字符串时,可能会发生这种情况,因此,它会弹出更多/更少的字节。

我确信这个词完全是口语化的,没有确切的含义。您是否有特定的引文或链接,指向您看到它被使用的地方

在没有任何精确的技术定义的情况下,我建议它的意思是该术语的使用者认为它意味着什么。我认为它可以应用于堆栈的任何滥用或低效使用,但由于堆栈操作中通常发生的所有情况都是堆栈指针被移动,因此很难定义什么会构成“垃圾”,而这不仅仅是正常和可取的行为


在每个线程都有自己的堆栈的多线程应用程序中,上下文切换也意味着堆栈的快速切换,但该事件完全可以用术语“任务抖动”来描述,不那么含糊。

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

好了,现在解释清楚了

哦,你想知道更多细节吗

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

如果你的C代码malloc's和free's每隔一行代码,你就是在砸堆

堆栈抖动的问题在于,如果你分析了你的代码,CPU会花费几乎所有的时间来弹出和推送

对于堆抖动,malloc()和free()是最常用的#1和#2函数

现在,一些CPU(rockwell make some)实际上已经过优化,可以在硬件中运行基于堆栈的语言

  • 内部ram,用于在CPU内缓存堆栈的前N千字节
  • 很少登记
  • 所有指令都是相对堆栈的
奇怪的是,Java虚拟机是一个基于堆栈的模型

在x86硬件上运行一个真正的哑巴FORTH实现将彻底摧毁堆栈。 在阅读了Forth规范之后,您可能会编写这种代码,因此您会为Forth指令发出x86机器代码,而不会对其进行优化。伙计们,我道歉,我知道你们的实施方式好多了

Postscript也是基于堆栈的,这使得早期的Postscript打印机非常令人兴奋:它们的ram有限,CPU速度慢,并且运行一种堆栈转换语言。我敢肯定,为了让它运行得更好,苹果公司的激光打印机已经投入了很多精力。 它有一个摩托罗拉68000的CPU,运行频率为(10ish)兆赫,内存为1Mb IIRC

再一次,堆叠打击器


这有帮助吗?

这不是我听过的一个短语-上下文是什么?我听说有人说他们“破坏了堆栈”,这意味着他们访问了一个错误的指针并重写了一些堆栈,导致程序以奇怪而令人兴奋(并且难以调试)的方式崩溃。我通常听说这被称为“破坏堆栈”。垃圾或鞭打。。在我看来,这可能有点像堆栈破坏。nt Sure我也听说过“缓存破坏”或“页面破坏”…@John,是的,这也很常见。我也听过“记忆跺脚”。如果我再次找到原始引用,我会尝试一下这个定义,看看它是否合适。但它肯定是有道理的,承认我写了“thrash”并按原样解决了问题和关键词,并且与这个词的英语定义一致。非常感谢你,蒂姆。我知道,但因为我从没听说过,我想也许他听错了。