6

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

4

2 回答 2

1

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

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

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

于 2009-05-28T05:39:13.327 回答
1

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

不过,当程序崩溃时,只查看堆栈跟踪可能会更容易。

于 2009-05-28T05:39:27.570 回答