
Java的:
private native voID malloc(int bytes);private native voID free();// this is called when I want to create a very large buffer in native memorymalloc(32 * 1024 * 1024);// EDIT: after allocating,we need to initialize it before AndroID sees it as anythign other than a "reservation"memset(blob,'static char* blob = NulL;voID Java_com_example_MyClass_malloc(jnienv * env,jobject this,jint bytes){ blob = (char*) malloc(sizeof(char) * bytes); if (NulL == blob) { __androID_log_print(ANDROID_LOG_DEBUG,DEBUG_TAG,"Failed to allocate memory\n"); } else { char m[50]; sprintf(m,"Allocated %d bytes",sizeof(char) * bytes); __androID_log_print(ANDROID_LOG_DEBUG,m); }}voID Java_com_example_MyClass_free(jnienv * env,jobject this){ free(blob); blob = NulL;}',sizeof(char) * bytes);...// and when I'm done,I call thisfree() C:
现在,当我从MyClass.java调用malloc()时,我希望看到32M的内存分配,并且我能够在某处看到可用内存的这种下降.
然而,我没有看到任何关于adb shell dumpsys meminfo或adb shell cat / proc / meminfo的指示.我是C的新手,但有一堆Java经验.我想在Dalvik的堆之外分配一堆内存(所以它不是由AndroID / dalvik管理的)用于测试目的. Hackbod让我相信AndroID目前没有对Native代码中分配的内存量进行限制,所以这似乎是正确的方法.我这样做了吗?
如果失败了,请让进程在分配之前和之后将/ proc / self / maps的内容复制到文件中. (最简单的方法是将其写入外部存储;您需要在清单中使用WRITE_EXTERNAL_STORAGE权限.)通过比较地图输出,您应该看到新的32MB区域,或者扩展32MB的现有区域.这是因为32MB高于dlmalloc的内部堆阈值,因此应该使用对mmap()的调用来分配内存.
您可以从本机代码分配的内存量没有固定限制.但是,你分配的越多,你对内核的低内存进程杀手看起来就越美味.
总结以上是内存溢出为你收集整理的Android NDK:为什么这个malloc()没有可观察到的影响?全部内容,希望文章能够帮你解决Android NDK:为什么这个malloc()没有可观察到的影响?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)