2012-07-09 17 views
7

Per allocare un'area di memoria nell'heap dalvik, le applicazioni utilizzano dlmalloc, invece del normale malloc, perché dlmalloc viene utilizzato e in che modo si differenzia da malloc. (Come noto, per allocare l'heap dalvik durante la creazione di dalvik VM, viene utilizzato malloc.)Differenza tra malloc e dlmalloc

+0

Hai letto [l'articolo di wikipedia sull'allocazione della memoria] (http://en.wikipedia.org/wiki/C_dynamic_memory_allocation) e la sua sezione su dlmalloc? – gfour

risposta

13

Il bit di ordine elevato era che Dalvik aveva bisogno di avere un allocatore sottostante separato dall'heap predefinito gestito da malloc, quindi potrebbe avere il giusto tipo di controllo su come è avvenuta l'allocazione, sapendo che altri sottosistemi non interferirebbero.

Come si è scoperto, dlmalloc era una libreria esistente abbastanza matura che forniva l'isolamento e i ganci necessari. L'intento (fino al punto in cui ho lasciato la squadra) era che alla fine lo avremmo sostituito con qualcosa di più su misura, ma non è mai diventato un argomento sufficientemente urgente per fare quel particolare tuffo.

Per quanto riguarda le differenze dettagliate tra dlmalloc e malloc: dlmalloc è un'implementazione specifica della tradizionale libc malloc API, mentre "malloc" di per sé non è specifico per una particolare implementazione. Ma anche se sei diventato specifico, dubito che potrei suggerire qualcosa di più di "leggere il codice" comunque.

+1

Ottima risposta, chiedendo se è possibile chiarire qualcosa - è dlmalloc usato come * the * malloc su Android, mantenendo pool separati in ogni processo per l'uso normale e per dalvik, oppure dalvik usa dlmalloc mentre altri call di malloc (in una jni lib o qualunque cosa) finiscono per usare qualcos'altro? –