我是 android 编程的新手。我有一个使用 NDK-Build 构建的 native C 应用程序。我正在其中一个线程中进行静态分配。
整数 X[64][4096];//<-- 正好需要 1 MB 空间。
当我使用 adb shell 运行它时,出现“段错误”。如果我将数组缩减为 X[63][4096],它似乎运行良好。现在我知道在 Android 中有一个 16MB 或类似的限制用于 VM,但是这个程序几乎没有分配占用 2MB 的 RAM(并且设置 ->应用程序显示我还有另外 650 MB 的备用内存)。
知道是什么导致了这次崩溃吗?以及如何解决?
问候
最佳答案
您所做的分配实际上不是静态的。如果 X
是函数内部的局部变量,每次进入函数时,它将在堆栈(通常比堆小得多)上动态分配,并在函数返回时释放。
如果您真的想让 X
成为静态的(即 X
应该有一个副本在线程函数的所有实例之间共享),您可以声明变量 静态
。
如果你想让每个线程都有自己的 X 副本,你应该使用 malloc()/new []
在堆上明确分配空间,并使用 free()/delete [] 释放它
。
关于Android NDK-BUILD 程序在静态数组分配时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13920588/