堆栈有多大,我用了多少

How big is the stack, and how much have I used up?

本文关键字:多少 堆栈      更新时间:2023-10-16

我有一个应用程序使用java和c++。最新版本似乎在c++部分发生了损坏,我怀疑这可能是由于堆栈溢出引起的。所以我想知道:

  • 我有多少堆栈?
  • 我用了多少?

是否有一些调用在运行时询问这些?

不是一个完整的答案,但我刚刚发现了GCC的- stack-usage标志。

Android上默认的pthread堆栈大小是1MB。默认的Dalvik堆栈大小要小得多(24 - 32KB),并且Dalvik堆栈不与本机堆栈共享。(在Art中,堆栈是合并的。)

堆栈溢出将导致崩溃,除非您设法写超过4KB保护页。内存的安排不太可能使写掉线程堆栈的末尾会破坏全局变量,但这不是不可能的。

堆栈垃圾更容易完成,但通常只会导致堆栈上的其他内容被冲洗。同样,不可能覆盖全局变量。

这听起来像是失败是确定的,你确定了做垃圾的代码。代码是做什么的?全球持有的价值观(好的和坏的)是什么?知道它被丢弃了什么——一个简单的整数,一个指针,一个随机的垃圾——可以很有启发性。