2012-07-09 18 views
7

Para asignar una región de memoria en dalvik heap, las aplicaciones usan dlmalloc, en lugar de malloc normal, por qué se usa dlmalloc y cómo se diferencia de malloc. (Según sé, para asignar dalvik montón mientras se crea dalvik VM, se usa malloc.)Diferencia entre malloc y dlmalloc

+0

¿Has leído [el artículo de wikipedia sobre asignación de memoria] (http://en.wikipedia.org/wiki/C_dynamic_memory_allocation) y su sección en dlmalloc? – gfour

Respuesta

13

El bit de orden alto era que Dalvik necesitaba tener un asignador subyacente que estuviera separado del montón predeterminado administrado por malloc, entonces podría tener el tipo correcto de control sobre cómo ocurrió la asignación, sabiendo que otros subsistemas no interferirían.

Al final resultó que, dlmalloc era una biblioteca existente razonablemente madura que proporcionaba el aislamiento y los ganchos que necesitábamos. La intención (hasta el momento en que dejé el equipo) fue que al final la reemplazáramos con algo más a medida, pero nunca se convirtió en un tema suficientemente apremiante como para dar ese paso en particular.

En cuanto a las diferencias detalladas entre dlmalloc y malloc: dlmalloc es una implementación específica de la API libc malloc tradicional, mientras que "malloc" per se no es específico para una implementación en particular. Pero incluso si es específico, dudo que pueda sugerir algo más que "leer el código" de todos modos.

+1

Gran respuesta, preguntándose si podría aclarar algo: se usa dlmalloc como * the * malloc en Android, manteniendo pools separados en cada proceso para uso ordinario y para dalvik, o dalvik usa dlmalloc mientras que otras llamadas malloc (en una jni lib o lo que sea) terminan usando algo más? –