В Android все распределения памяти являются «виртуальными» в том смысле, что память не совершена, если она действительно не доступна. Если я правильно помню, VirtualAlloc поступает из Windows CE, где память на один процесс искусственно ограничена 32 мегабайтами (см. http://denniskrabbe.wordpress.com/2009/10/09/windows-mobile-heaps-from-the-large-memory-area/). На Android ограничения являются естественными из 32-разрядной архитектуры (iOS недавно вступила в 64-разрядную эру). Существуют некоторые ограничения на размер кучи JVM, но они не применяются к нативной (NDK) памяти (см. Maximum native memory that can be allocated to an android app)
В Android, как и любой Linux, malloc оптимистичен, что означает, что вы можете столкнуться с нестандартными возможностями, после того, как ваш malloc преуспел, см. Does malloc lazily create the backing pages for an allocation on Linux (and other platforms)?. С другой стороны, bionic не дает custom memory allocation hooks как glibc.
Означает ли это, что я должен использовать malloc/new для обработки памяти? В VirtualAlloc я могу запросить зарезервировать или передать явно, как это сделать в родной среде Android? – JaimeBarrachina
Что вы пытаетесь сделать? (Я чувствую себя немного http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem здесь.) – fadden
Нет, в Android (ни в бионике, ни в ядре Linux) можно не запрашивать резервирование или передачу явно. –