簡體   English   中英

聲明大數組時 JNI 函數崩潰

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM