2016-12-15 2 views
0

ich dynamisch Speicher in meinem NDK Code zuweisen, habe ich versucht, die folgenden zwei Möglichkeiten:dynamische Zuweisung von Speicher im Android

1)

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

2)

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

len_ ist ein sehr große Zahl, in meinem Test ist es 132710400, das sind rund 130 MB. Beide Wege funktioniert! Und wenn ich die Speicherauslastung in Android Monitor überprüfte, verwendete der Speicher nur ~ 30MB. Ich weiß, dass der zugewiesene Speicher nur virtueller Speicher ist und möglicherweise nicht wirklich vom physischen Speicher zugewiesen wird. Aber ich bin mir sicher, dass ich aus diesem Speicher geschrieben und gelesen habe, damit es eigentlich zugeteilt werden muss. Ich möchte nur wissen, wie das passieren kann? Stimmt etwas mit Android Monitor nicht? Oder weiß ich etwas über Android OS? Oder der Android Monitor kann den von nativem Code verwendeten Speicher nicht verfolgen?

+2

Wenn ich mich richtig erinnere der Speicheranalysator in Android Studio nur für Java-Speicher, nicht nativ. – Francesc

Antwort

0

Sie können die Befehlszeilenwerkzeuge verwenden, um zu sehen, wie viel virtueller Speicher und wie viel residenter Speicher Ihr Prozess verwendet.

Zunächst sicherstellen, dass in Ihrem AndroidManifest.xml Sie in der Anwendung Tag haben android:debuggable="true"

Dann auf der Kommandozeile können Sie einen Shell-Befehl mit adb auszuführen.

Die vierte Spalte zeigt die virtuelle Größe, die fünfte Spalte zeigt die resident eingestellte Größe. Die angegebenen Größen sind in Seiten, die wahrscheinlich 4096 Bytes sind.

Wenn mem zwischen neuen und vector immer noch da sind, fügen Sie eine memset(buffer_, 0, len_) hinzu und sie sollten ähnlich sein.

Verwandte Themen