我有需要分配大量内存(50MB)的NDK应用程序,但不幸的是malloc()返回null而errno设置为12表示ENOMEM。
然而,在我启动应用程序之前,我确实看到了“设备内存”#39;显示我有1.7GB内存空闲。当从C' C'分配内存时,heapsize / heapmaxfree也不应该在图片中。申请我在下面附上了这些信息。
[dalvik.vm.heapgrowthlimit]: [128m]
[dalvik.vm.heapmaxfree]: [8m]
[dalvik.vm.heapminfree]: [2m]
[dalvik.vm.heapsize]: [512m]
[dalvik.vm.heapstartsize]: [8m]
[dalvik.vm.heaptargetutilization]: [0.75]
我无法使用我的NDK代码中的malloc()分配大量内存的原因是什么?
此外,我使用ActivityManager API检索内存类和avaialble内存,它显示以下输出,我的清单请求包括android:largeHeap =" true"
onCreate GetMemoryClass => 128
onCreate getLargeMemoryClass => 512
onCreate avmem => 456 MB
MemoryInfo mi = new MemoryInfo();
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
am.getMemoryInfo(mi);
long avmem = mi.availMem / 1048576L;
Log.d(mTAG, "onCreate GetMemoryClass => " + am.getMemoryClass() );
Log.d(mTAG, "onCreate getLargeMemoryClass => " + am.getLargeMemoryClass() );
Log.d(mTAG, "onCreate avmem => " + avmem + " MB");
所以它继续困扰我为什么有450MB的内存可用而且malloc()无法分配50MB的内存,这是因为内存管理的一部分还是应该是这样的东西?
我在Galaxy S4设备上的Android 4.4.1上运行我的程序。