Der NDK Download-Seite stellt fest, dass, „Typische gute Kandidaten für das NDK sind in sich geschlossene, CPU-intensive Operationen, die, wie Signalverarbeitung, Physik-Simulation, und so weiter nicht viel Speicher zuweisen.“Wie viel ist zu viel Speicherzuweisung in NDK?
Ich kam von einem C-Hintergrund und war aufgeregt zu versuchen, die NDK zu verwenden, um die meisten meiner OpenGL ES-Funktionen und alle nativen Funktionen im Zusammenhang mit Physik, Animation von Vertices, etc ... Ich finde, dass ich Ich verlasse mich ein wenig auf nativen Code und frage mich, ob ich vielleicht Fehler mache. Ich hatte zu diesem Zeitpunkt keine Probleme mit Tests, aber ich bin gespannt, ob ich in Zukunft Probleme bekommen könnte.
Zum Beispiel habe ich Spielstruktur definiert (etwa wie im San-Angeles-Beispiel gesehen). Ich lade Vertexinformation für Objekte dynamisch (genau das, was für einen aktiven Spielbereich benötigt wird), so gibt es ziemlich viel Zuordnungsspeicher für Ecken geschieht, Normalen, Texturkoordinaten, Indizes und Textur Grafikdaten ... nur das Wesentliche zu nennen . Ich bin ziemlich vorsichtig damit, was zwischen Spielbereichen aufgeteilt wird.
Wäre ich sicherer, einige Caps auf Array-Größen zu setzen, oder sollte ich tapfer vorwärts gehen, wie ich jetzt gehe?
Dank Tim. Das ist ein wenig unheimlich, wenn man unter 16 MB bleibt. Wenn ich das richtig verstehe, ist es eine Obergrenze, die vom Hersteller des Telefons vom Betriebssystem implementiert werden kann, so dass jede Anwendung nur auf eine bestimmte Menge an Speicher zugreifen kann? Wenn diese Obergrenze nicht gesetzt ist, kann dann jede Anwendung so viel von verfügbarem RAM (im Rahmen des Grundsätzlichen) zuweisen, wie sie benötigt? Wollen Sie sagen, wenn getMemoryClass() auf Ihren Handys ausgeführt wird, geben sie null zurück? Welche Telefone haben Sie, wenn ich so mutig fragen kann ... Gibt es irgendwo Informationen über dieses Limit für neuere Telefone? (Bin ich komplett aus der Basis?) – Maximus
Ich hätte die NDK-Gruppe zuerst suchen sollen ... von Dianne Hackborn. "Auch wenn dies die NDK-Liste ist, wird das Limit Ihnen nicht auferlegt, da es nur auf dem Java-Heap ist. Es gibt keine Begrenzung für Zuordnungen im nativen Heap ..." Sie fährt fort zu sagen dass es nicht missbraucht werden sollte, und wenn es so ist, könnten Anwendungen getötet werden. Das ist der Thread, es ist eine gute Lektüre zum Thema im Allgemeinen. http://groups.google.com/group/android-ndk/browse_thread/thread/95c9f0cecceb112a/ab033b9a28d52fcd?lnk=gst&q=heap+limit#ab033b9a28d52fcd – Maximus
@Maximus Diannes Kommentare fassen es sehr gut zusammen. Es gibt zwar keine feste Grenze dafür, wie viel Heap mit dem NDK zugewiesen werden kann (das Ausführen von "ulimit -d" gibt "unlimited" zurück), es gibt jedoch Konsequenzen für die Verwendung des gesamten verfügbaren Speichers. –