如何在运行时检查堆栈溢出

时间:2013-10-27 22:54:00

标签: windows x86 stack-overflow

我主要考虑的是Windows。

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

在旧机器上,我记得没有检查,但有些fff变成000,所以没有检查费用,但今天在Windows平台上,我觉得可能每个堆栈都被绑定检查 - 但我不知道它是怎么回事实施。

1 个答案:

答案 0 :(得分:1)

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

在问题中观察到的不进行边界检查的好处是代码运行得更快。如果想要检查某些特定原因,可以插入针对该特定情况的边界检查。