Android NDK:为什么这个malloc()没有可观察到的影响?

Android NDK:为什么这个malloc()没有可观察到的影响?,第1张

概述这是我正在使用的代码的简化版本 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);// ED 这是我正在使用的代码的简化版本

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代码中分配的内存量进行限制,所以这似乎是正确的方法.我这样做了吗?

解决方法 您应该看到memset()之后“私有/脏”页面的增加.如果您在设备上安装了额外的开发人员命令行实用程序,则可以运行procrank或showmap< pID>很容易看到这一点.需要root设备.

如果失败了,请让进程在分配之前和之后将/ proc / self / maps的内容复制到文件中. (最简单的方法是将其写入外部存储;您需要在清单中使用WRITE_EXTERNAL_STORAGE权限.)通过比较地图输出,您应该看到新的32MB区域,或者扩展32MB的现有区域.这是因为32MB高于dlmalloc的内部堆阈值,因此应该使用对mmap()的调用来分配内存.

您可以从本机代码分配的内存量没有固定限制.但是,你分配的越多,你对内核的低内存进程杀手看起来就越美味.

总结

以上是内存溢出为你收集整理的Android NDK:为什么这个malloc()没有可观察到的影响?全部内容,希望文章能够帮你解决Android NDK:为什么这个malloc()没有可观察到的影响?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1127432.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存