堆栈有多大,我用了多少钱?

时间:2014-07-17 10:21:30

标签: android c++ android-ndk

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

  • 我有多少叠?
  • 我用多少钱?

是否有人要求在运行时询问这些内容?

2 个答案:

答案 0 :(得分:0)

不是一个完整的答案,但我刚刚发现了GCC的-fstack-usage标志。这可能会有所帮助。

答案 1 :(得分:0)

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

堆栈溢出会导致崩溃,除非您设法写入4KB保护页面。内存的排列不太可能使得写出线程堆栈的末尾会踩到你的全局变量,但这并非不可能。

堆栈垃圾更容易实现,但通常只会导致堆栈中的其他东西被冲洗掉。同样,不太可能覆盖全局。

听起来失败是确定性的,并且您确定了正在进行捣乱的代码。代码做了什么?全球持有的价值观(好的和坏的)是什么?知道它被破坏的东西 - 一个简单的整数,一个指针,随机的垃圾 - 可以很有启发性。