[英]JNI function crash when declare large arrays
目前我已經在 Android Studio 項目中編寫了一個 JNI 函數,應用程序在這行 JNI 函數中崩潰了。
rgbStruct values[1700][1700];
而 rgbStruct 是
struct rgbStruct {
unsigned char r, g, b;
}
錯誤信息是A/libc: Fatal signal 11 (SIGSEGV), code 2, fault addr 0xbf06f37c in tid 11351
有趣的是, rgbStruct values[1500][1500];
雖然工作正常。 所以我想這將是一個內存泄漏問題,我不確定如何增加本機端的內存限制。 我已經嘗試從studio.vmpoptions
文件增加內存大小,但它根本沒有幫助。 請讓我知道我可以為此做些什么。
在studio.vmoptions
-Xmx8000m
-XX:MaxPermSize=4024m
-XX:ReservedCodeCacheSize=2000m
-XX:+UseCompressedOops
代碼參考:
extern "C" JNIEXPORT jstring JNICALL Java_com_test_MainActivity_funcFromJNI(
JNIEnv * env, jobject obj) {
rgbStruct pixels[1700][1700];
return env->NewStringUTF("Hello");
}
是的,你不能那樣做。 您所做的是在 C 函數中聲明一個大小約為 7MB 的局部變量。 運行時將嘗試在堆棧上分配它,而不是在堆上。 這行不通。
您需要在堆上動態分配內存,使用 malloc 或類似的東西。 閱讀有關如何在使用 JNI 時動態分配內存的信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.