首先,大家应该很清楚,android为每个应用程序(具体应该说是VM)分配的最大堆内存(heap)为16m(可能不同的手机品牌会有修改)。
    超过这个最大值,会出现oom而导致虚拟机被关闭。
    
     这是对于纯sdk开发来说,如果对于ndk开发,编译生成的so不会运行在虚拟机中,也就没有这个的限制。     但是linux不能让一个进程无限制的使用内存资源吧?
     
     如果有限制,那谁能知道关于android的linux的内存管理机制是如何的?代码在什么地方?
  
     请高手不吝赐教。

解决方案 »

  1.   

    这个要看神马系统,32位4G,这只是理论的值,实际上一个进程还没占用到4G的时候估计系统就反应很慢了
    我找了段代码你可以试试
    int main()
    {
    int MB = 0;
    while(malloc(1 << 20)) ++MB;
    printf("Allocated %d MB total.n", MB); 
    }
    至于linux内存管理机制,那真不是几句话能说清的
      

  2.   

    oom是linux机制,android底层主要靠Lowmemorykiller来做内存回收,系统会设置几个阈值,当程序超过时会将程序终止。
      

  3.   

    csuhanyong,你在哪找到的,贴出来跟大家分享一下哈~~
      

  4.   

    drivers/staging/Android/lowmemorykiller.c