如何通过监控堆栈大小来防止堆栈溢出?

时间:2009-05-28 05:26:31

标签: size stack-overflow monitor

许多C / C ++ / Fortran和其他程序员都会遇到“堆栈溢出”错误。 我的问题是,是否有工具,程序或简单的代码片段,允许我们在程序运行时监视或检查堆栈的大小?这可能有助于确定堆栈的累积位置并最终导致溢出。

2 个答案:

答案 0 :(得分:1)

看看这个question。接受的答案引用了Raymond Chen:

If you have to ask, you're probably doing something wrong.

如果您确实需要这样做,那么解决方案/工具将取决于平台。一个简单的技巧是用已知的字节值(例如AA)填充堆栈并监视没有该值的第一个字节的位置。这将为您提供最大堆栈大小,而不是当前堆栈大小。

答案 1 :(得分:1)

我不知道是否有一个程序会为你做,但你可以轻松检查堆栈指针所在的函数(至少在C和C ++中)。只需查看任何变量的内存位置。它不是确切的位置,但应该在几个字节内(这对于您的目的来说很好),因为局部变量是在堆栈上定义的。如果你想要精确的值,你可以通过装配得到它我相信。

但是,当程序崩溃时,可能更容易看到堆栈跟踪。