我主要考虑的是Windows。
AFAIK在这样的平台上有很多堆栈,每个程序,甚至每个线程都有自己的堆栈,每个这样的线程都可以将字节推送到它上面--AFAIK应该在堆栈的情况下在运行时检查每个这样的推送溢出 - 所以它似乎是与每次推送相关的一些成本(类似于数组边界检查) - 如何实现这种检查?
在旧机器上,我记得没有检查,但有些fff变成000,所以没有检查费用,但今天在Windows平台上,我觉得可能每个堆栈都被绑定检查 - 但我不知道它是怎么回事实施。
答案 0 :(得分:1)
我不知道在Windows或Linux平台上有任何完全编译的语言默认调用堆栈边界检查。因此,溢出可用堆栈空间会导致分段错误,如(例如)问题Segmentation fault due to recursion和What is the difference between a segmentation fault and a stack overflow?中所述。
在问题中观察到的不进行边界检查的好处是代码运行得更快。如果想要检查某些特定原因,可以插入针对该特定情况的边界检查。