【问题标题】:how stack overflow is checked in runtime如何在运行时检查堆栈溢出
【发布时间】:2023-03-03 17:18:02
【问题描述】:

我主要考虑 Windows。

AFAIK 在这样的平台上有很多堆栈,每个程序,或者甚至每个线程都有自己的堆栈,并且每个这样的线程都可以将字节推送到它上面 - AFAIK 每个这样的推送都应该在运行时检查堆栈的情况溢出 - 所以似乎每次推送都有一些成本(类似于数组边界检查) - 这种检查究竟是如何实现的?

在旧机器上,我记得没有检查,但有些 fff 变成 000,所以没有检查成本,但今天在 Windows 平台上,在我看来,可能每个堆栈都已绑定检查 - 但我不知道它是如何进行的已实施。

【问题讨论】:

    标签: windows x86 stack-overflow


    【解决方案1】:

    我不知道 Windows 或 Linux 平台上有任何完全编译的语言默认调用堆栈边界检查。因此,溢出可用堆栈空间会导致分段错误,如(例如)问题Segmentation fault due to recursionWhat is the difference between a segmentation fault and a stack overflow? 中所述。

    正如问题中所观察到的,不进行边界检查的好处是代码运行得更快。如果出于某种特定原因想要进行边界检查,则可以为该特定情况插入边界检查。

    【讨论】:

      猜你喜欢
      • 2021-05-28
      • 2016-05-15
      • 1970-01-01
      • 2013-09-11
      • 2018-01-28
      • 2010-12-22
      • 2021-11-10
      • 2011-12-11
      相关资源
      最近更新 更多