2013-06-14 6 views
6

私はC++で書かれたゲームをNDKを使ってAndroidに移植します。実行中に消費するメモリ量を知る必要があります。私は、プログラムでC++で書かれたAndroidアプリケーションのメモリ使用量を見つける方法を探しています。 JavaではNDKを使ってC++で書かれた私のアンドロイドアプリケーションのメモリ使用量を調べるには

+0

一つの方法は、 'new'と' DELETE'演算子をオーバーライドして、いくつかの簿記を行うことです。 – user1095108

答えて

6

JonnyBoyの回答に基づいて2つの機能を。 malloc()および関連関数のみによって行われるメモリ割り当て約

static long getNativeHeapAllocatedSize(JNIEnv *env) 
{ 
    jclass clazz = (*env)->FindClass(env, "android/os/Debug"); 
    if (clazz) 
    { 
     jmethodID mid = (*env)->GetStaticMethodID(env, clazz, "getNativeHeapAllocatedSize", "()J"); 
     if (mid) 
     { 
      return (*env)->CallStaticLongMethod(env, clazz, mid); 
     } 
    } 
    return -1L; 
} 

static long getNativeHeapSize(JNIEnv *env) 
{ 
    jclass clazz = (*env)->FindClass(env, "android/os/Debug"); 
    if (clazz) 
    { 
     jmethodID mid = (*env)->GetStaticMethodID(env, clazz, "getNativeHeapSize", "()J"); 
     if (mid) 
     { 
      return (*env)->CallStaticLongMethod(env, clazz, mid); 
     } 
    } 
    return -1L; 
} 
+3

実際には、これらのJavaメソッドはネイティブメソッドそのものです。 http://androidxref.com/source/xref/frameworks/base/core/jni/android_os_Debug.cpp(cpp-source)によれば 'mallinfo()'を使って 'uordblks'(' getNativeHeapAllocatedSize() ')と' usmblks'( 'getNativeHeapSize()') –

+0

@ super-qua、Tankあなたはそんなに! – CAMOBAP

0

Debug.getNativeHeapAllocatedSize()Debug.getNativeHeapSize()リターン情報。 C++の/proc/self/statmを簡単に解析し、VmRSSというメトリックを得ることができます。

See details here

関連する問題