2012-07-09 22 views
7

Aby przydzielić region pamięci w sterty dalvik, aplikacje używają dlmalloc, zamiast normalnego malloc, dlaczego dlmalloc jest używany i jak różni się od malloc. (Jak już wiem, za przydzielenie sterty dalvik podczas tworzenia dalvik VM, stosuje się malloc).Różnica między malloc a dlmalloc

+0

Czy przeczytałeś [artykuł wikipedii o alokacji pamięci] (http://en.wikipedia.org/wiki/C_dynamic_memory_all_ococation) i jego sekcji na temat dlmalloc? – gfour

Odpowiedz

13

Bit wyższego rzędu polegał na tym, że Dalvik potrzebował bazowego przydziału, który był oddzielny od domyślnego sterty zarządzanego przez malloc, więc może mieć odpowiedni rodzaj kontroli nad tym, jak doszło do alokacji, wiedząc, że inne podsystemy nie będą zakłócać działania.

Jak się okazało, dlmalloc był dość dojrzałą istniejącą biblioteką, która zapewniała izolację i haki, których potrzebowaliśmy. Intencją (do momentu, kiedy opuściłem zespół) było to, że w końcu zastąpiliśmy to czymś bardziej wymyślonym, ale nigdy nie stało się to wystarczająco pilną kwestią, aby podjąć ten konkretny krok.

Co do szczegółowych różnic między dlmalloc i malloc: dlmalloc jest specyficzną implementacją tradycyjnego API mallc libc, podczas gdy "malloc" per se nie jest specyficzne dla konkretnej implementacji. Ale nawet jeśli masz konkretne, wątpię, czy mógłbym zasugerować coś więcej niż "przeczytać kod".

+1

Świetna odpowiedź, zastanawiasz się, czy możesz coś wyjaśnić - czy dlmalloc jest używany jako * the * malloc na Androidzie, utrzymujący oddzielne pule w każdym procesie dla zwykłego użycia i dla dalvik, czy też dalvik używa dlmalloc, podczas gdy inne wywołania malloc (w jni lib lub cokolwiek) kończy się na używaniu czegoś innego? –