繁体   English   中英

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

[英]how stack overflow is checked in runtime

我主要在考虑Windows。

在此类平台上的AFAIK有很多堆栈,每个程序,甚至每个线程都有自己的堆栈,并且每个这样的线程都可以将字节推入到其上-AFAIK在堆栈溢出的情况下,应在运行时检查每个此类推入-因此似乎每一次推送都涉及一些成本(类似于数组边界检查)-这种检查的实现方式是如何?

我记得在旧机器上没有进行检查,但是一些fff变为000,因此没有检查成本,但是今天在Windows平台上,我似乎可能已对每个堆栈都进行了检查-但我不知道它是如何实现的。

我不知道Windows或Linux平台上的任何完全编译的语言会在默认情况下调用堆栈边界检查。 因此,溢出可用的堆栈空间会导致分段错误,如问题( 由于递归引起的分段错误 )中所述,分段错误和堆栈溢出之间有什么区别?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM