android – 在NDK中有多少内存分配?

NDK下载页面指出,“NDK的典型的优秀候选人是独立的,CPU密集型操作,不会分配很多内存,如信号处理,物理仿真等.

我来自C背景,很高兴尝试使用NDK来操作我的大部分OpenGL ES函数和与物理,顶点动画等相关的任何本机功能.我发现我依赖于一个有一点本机代码,想知道我是否可能犯了一些错误.我在这一点上没有麻烦的测试,但如果将来可能遇到问题,我很好奇.

例如,我有游戏结构定义(有些像在圣洛杉矶的例子中看到).我正在动态地加载对象的顶点信息(只是活动游戏区域所需要的),因此在顶点,法线,纹理坐标,索引和纹理图形数据方面有相当多的内存分配.只是为了命名要素.我非常小心释放游戏区域之间的分配.

我会更安全地设置一些数组大小的帽子,还是我现在要勇敢地前进?

由于使用NDK的应用程序应该与使用SDK开发的应用程序类似,所以我认为合理的堆使用的最佳指导来自ActivityManager.java的评论.

/**
 * Return the approximate per-application memory class of the current
 * device.  This gives you an idea of how hard a memory limit you should
 * impose on your application to let the overall system work best.  The
 * returned value is in megabytes; the baseline Android memory class is
 * 16 (which happens to be the Java heap limit of those devices); some
 * device with more memory may return 24 or even higher numbers.
 */
public int getMemoryClass() {
    return staticGetMemoryClass();
}

/** @hide */
static public int staticGetMemoryClass() {
    // Really brain dead right now -- just take this from the configured
    // vm heap size, and assume it is in megabytes and thus ends with "m".
    String vmHeapSize = SystemProperties.get("dalvik.vm.heapsize", "16m");
    return Integer.parseInt(vmHeapSize.substring(0, vmHeapSize.length()-1));
}

为Dalvik VM设置堆大小的代码为AndroidRuntime.cpp,并提供了一个示例,说明如何使用property_get函数确定本机代码中堆分配的粗略限制.

strcpy(heapsizeOptsBuf, "-Xmx");
property_get("dalvik.vm.heapsize", heapsizeOptsBuf+4, "16m");
//LOGI("Heap size: %s", heapsizeOptsBuf);
opt.optionString = heapsizeOptsBuf;
mOptions.add(opt);

默认值为16m可能很重要,因为我拥有的两个Android手机都不具有默认设置的dalvik.vm.heapsize属性.

翻译自:https://stackoverflow.com/questions/3039369/how-much-is-too-much-memory-allocation-in-ndk

转载注明原文:android – 在NDK中有多少内存分配?