Android NDK-BUILD程序在静态数组分配时崩溃

G.A*_*.A. 2 c android segmentation-fault android-ndk

我是android编程的新手.我有一个使用NDK-Build构建的本机C应用程序.我正在其中一个线程中进行静态分配.

int X [64] [4096]; // < - 正好需要1 MB空间.

当我使用adb shell运行它时,我得到一个"分段错误".如果我将数组减少到只有X [63] [4096],它似乎运行正常.现在我知道有一个16MB或类似于android的VM限制,但这个程序很难分配占用2MB的RAM(而设置 - >应用程序显示我剩下另外650 MB备用ram).

知道什么可能导致这次崩溃吗?以及如何解决它?

问候

Mic*_*ael 5

你实际进行的分配并不是静态的.如果X是函数内部的局部变量,则每次输入函数时,它将在堆栈上动态分配(通常比堆小得多),并在函数返回时释放.

如果你真的X想要成为静态的(即应该X在线程函数的所有实例中共享一个副本),你可以声明变量static.
如果你想让每个线程拥有自己的X副本,你应该明确地在堆上分配空间并使用malloc() / new []它来释放它free() / delete [].