2013-06-05 19 views
8

Chciałbym używać wysokiej jakości uniwersalnego przydziału, takiego jak jemalloc/tcmalloc z pulą pamięci. Czy istnieje przewodnik do robienia tego? Nie chcę używać jemalloc/tcmalloc jako zamiennika zamiennika dla malloc.Używanie tcmalloc/jemalloc z niestandardowym menedżerem puli pamięci

Mam pulę pamięci, która używa libarena i rzeźbi duży obszar pamięci (2 GB). Chcę utworzyć pulę o ustalonych rozmiarach, taką jak gslice na tej arenie, powiedzmy 1 GB. (jak przydział Bonwick do dzielenia płyt) i chce wykorzystać resztę pamięci do alokacji ogólnego przeznaczenia o zmiennym rozmiarze. Chciałbym użyć tego obszaru pamięci jako jemalloc/tcmalloc. czy to możliwe? Jakieś pomysły dotyczące dalszego postępowania? Jeśli istnieje alternatywna biblioteka, również chciałbym o tym usłyszeć.

+1

Powodzenia w uzyskaniu odpowiedzi na to pytanie, tak naprawdę chciałem uzyskać odpowiedź na to pytanie, proszę zobaczyć moje http://stackoverflow.com/questions/23341587/malloc-like-function-using-custom-heap własne pytanie. – Vality

+0

Napisałem alokator specjalnie dla naszej aplikacji. Jedną rzeczą, która okazała się być naprawdę sprytnym pomysłem, była koncepcja zredukowania wszystkich możliwych przydziałów do niewielkiej liczby "kwantowych" rozmiarów. Poniżej 4k = 8 bajtów, 4k..16k = 16 bajtów ... maksymalnie 64 MB. W końcu miałem tylko około 1000 różnych rozmiarów, aż do 64 MB. Zmarnowany baran był niski, ponieważ wielkość zmarnowanej przestrzeni była funkcją wielkości przydziału. Pozwoliło to na utylizację stosów dla każdego rozmiaru. Wolny był tylko pchnięciem, a przydziałem był pop, chyba że stos był pusty dla tego rozmiaru. – johnnycrash

+0

Nie mam dla ciebie odpowiedzi, ale możesz znaleźć przydatne informacje na temat tego wątku jemalloc dotyczącego przydzielania pamięci jako dodatkowych aren dla niestandardowych alokatorów tutaj: http://www.canonware.com/pipermail/jemalloc-discuss/2015 -Styczeń/000988.html – acanaday

Odpowiedz

2

To jest stare pytanie, ale nareszcie istnieje pozytywna odpowiedź, przynajmniej jeśli chodzi o jemalloc. Od jemalloc w wersji 4.0.0 można użyć mallctl, aby ustawić haki, w których fragmenty alokacji pobierają pamięć za pomocą interfejsu arena.<i>.chunk_hooks. Te haki są dobrze udokumentowane w jemalloc manpage, w tym wiele odniesień.

Nie jestem świadomy co do podobnego interfejsu w tcmalloc; Nie używam tego.

Odpowiedziałem na similar question pół-niedawno; tam też mogą być przydatne informacje.