Opracowaliśmy prototypy NDK do prostego projektu. Kod jest kompilowany i działa na urządzeniu oraz w symulatorze. Jednak patrząc w menu ustawień na telefonach: (Samsung Galaxy Nexus (Android 4.2.2), Samsung Gio (Android 2.3.6)), uruchomienie aplikacji na Gio zajmuje o wiele więcej miejsca niż podczas uruchamiania aplikacji Galaxy Nexus. Ponadto, następujące raporty dowodzenia znacznie wyższe allocations sterty dla GIO:Czy urządzenia z Androidem używają różnych ilości sterty i śladu na potrzeby tej samej aplikacji
System.out.println(Debug.getNativeHeapAllocatedSize()/1049L);
Używamy statycznych bibliotek dla wielu funkcjonalności. Dokładne wyniki są następujące:
NEXUS:
- Footprint (MB) (wdrożenie Java) 1,24
- Footprint (MB) (C++ lib realizacja) 0,96
- alokacji pamięci (MB) (Implementacja Java) 1.6
- Alokacja pamięci (MB) (implementacja biblioteki C++) 1.5
GIO:
- Footprint (MB) (wdrożenie Java) 1,19
- Footprint (MB) (C++ lib realizacja) 1,71
- alokacji pamięci (MB) (wdrożenie Java) 4,6
- Alokacja pamięci (MB) (implementacja biblioteki C++) 5.5
Jaki jest powód tej różnicy w użytkowaniu Footprint i pamięci?
(Pomiar alokacji na urządzeniu z systemem iOS (biblioteka C++) daje w przybliżeniu taki sam wynik na 3GS jak na Galaxy Nexus).
Czy urządzenia 2 użyć tej samej wersji systemu operacyjnego Android? Myślę, że jest to powiązane. – Raptor
Zaktualizowane pytanie z Androidem w wersji –
Android OS v2 i v4 traktują pamięć w inny sposób, ponieważ używają innego jądra. Może to jest powodem różnicy. – Raptor