2016-12-15 44 views
0

我動態在我NDK代碼分配內存動態分配,我嘗試以下兩種方式:的存儲器中的Android

1)

vector<char> buffer_; 
buffer_.resize(len_); 

2)

char* buffer_; 
buffer_ = new char[len_]; 

len_是一個非常大的數字,在我的測試中是132710400,大約130 MB。 兩種方式都有效!當我在Android Monitor中查看內存使用情況時,內存使用量只有30MB左右。我知道分配的內存只是虛擬內存,並不能真正從物理內存中分配。但我確定我已經寫入並從這個內存中讀取,所以它應該實際分配。 我只想知道如何發生這種情況? Android Monitor有什麼問題嗎?或者有什麼我不瞭解Android操作系統?或者Android監視器無法跟蹤本地代碼使用的內存?

+2

如果我沒有記錯的話,Android Studio中的內存分析器只佔Java內存,而不是本機。 – Francesc

回答

0

您可以使用命令行工具來查看您的進程正在使用多少虛擬內存和多少常駐內存。

首先,確保你的AndroidManifest.xml您在應用程序標籤android:debuggable="true"

具有然後在命令行中,你可以使用亞行執行shell命令。

$ adb shell run-as com.yourdomain.yourapp /system/bin/sh -c "ps aux" 

第四欄示出了虛擬大小,第五列示出駐留集大小。 報告的大小以頁面爲單位,可能每個頁面大小爲4096字節。

如果mem在new和vector之間仍然存在,請添加一個memset(buffer_, 0, len_),它們應該相似。