Chúng tôi đã phát triển các mẫu thử NDK cho một dự án đơn giản. Mã được biên dịch và làm việc trên thiết bị và trong trình mô phỏng. Tuy nhiên khi nhìn vào menu cài đặt trên điện thoại: (Samsung Galaxy Nexus (Android 4.2.2), Samsung Giờ (Android 2.3.6)), chạy ứng dụng trên Gio chiếm nhiều không gian hơn khi ứng dụng chạy trên Galaxy Nexus. Ngoài ra, lệnh sau báo cáo phân bổ heap cao hơn nhiều cho GIO:Thiết bị Android có sử dụng số lượng heap và dấu chân khác nhau cho cùng một ứng dụng hay không
System.out.println(Debug.getNativeHeapAllocatedSize()/1049L);
Chúng tôi đang sử dụng thư viện tĩnh cho nhiều chức năng. Các kết quả chính xác là:
NEXUS:
- Footprint (MB) (Java thực hiện) 1,24
- Footprint (MB) (C++ thực hiện lib) 0,96
- cấp phát bộ nhớ (MB) (Thực hiện Java) 1.6
- Phân bổ bộ nhớ (MB) (triển khai thực hiện lib C++) 1.5
GIO:
- Footprint (MB) (Java thực hiện) 1,19
- Footprint (MB) (C++ thực hiện lib) 1,71
- cấp phát bộ nhớ (MB) (Java thực hiện) 4.6
- Cấp phát bộ nhớ (MB) (triển khai thực hiện lib C++) 5.5
Lý do khác biệt trong việc sử dụng dấu chân và bộ nhớ là gì?
(Đo phân bổ trên thiết bị iOS (C++ lib) mang lại kết quả tương tự trên 3GS như trên Galaxy Nexus).
Liệu 2 thiết bị sử dụng phiên bản hệ điều hành Android giống nhau không? Tôi nghĩ nó có liên quan. – Raptor
Câu hỏi được cập nhật với phiên bản Android –
Android OS v2 & v4 xử lý bộ nhớ theo một cách khác, khi chúng sử dụng hạt nhân khác. Có lẽ đây là lý do của sự khác biệt. – Raptor