Microsoft otworzył bibliotekę na licencji MIT
Kluczową cechą mimalloc jest jego kompaktowa implementacja (mniej niż 3500 linii kodu) i bardzo wysoka wydajność. W
Aby ocenić wydajność, zestaw istniejących
Wysoką wydajność osiąga się głównie dzięki zastosowaniu darmowego dzielenia list. Zamiast jednej dużej listy mimalloc używa szeregu mniejszych list, z których każda jest powiązana ze stroną pamięci. Takie podejście zmniejsza fragmentację i zwiększa lokalizację danych w pamięci. Strona pamięci to pogrupowany zestaw bloków o podobnym rozmiarze. W systemach 64-bitowych rozmiar strony wynosi zazwyczaj 64 KB. Jeśli na stronie nie ma już zajętych bloków, jest ona całkowicie zwalniana, a pamięć wraca do systemu operacyjnego, co zmniejsza koszty pamięci i fragmentację w długotrwałych programach.
Bibliotekę można włączyć na etapie łączenia lub załadować dla już zmontowanego programu („LD_PRELOAD=/usr/bin/libmimalloc.so mójprogram”). Biblioteka także zapewnia
Możliwe jest zbudowanie biblioteki w trybie awaryjnym, w którym na granicach bloków zostaną podstawione specjalne strony sprawdzające pamięć (strony ochronne), zastosowano randomizację rozkładu bloków i szyfrowanie list zwolnionych bloków. Takie środki umożliwiają blokowanie najpowszechniejszych technik wykorzystywania przepełnień bufora opartych na stercie. Po włączeniu trybu awaryjnego wydajność spada o około 3%.
Wśród cech mimallocu należy zauważyć również, że nie jest on podatny na problemy z wzdęciami ze względu na duże rozdrobnienie. W najgorszym przypadku zużycie pamięci wzrasta o 0.2% w przypadku metadanych i może osiągnąć 16.7% w przypadku pamięci rozproszonej. Aby uniknąć konfliktów podczas uzyskiwania dostępu do zasobów, mimalloc używa wyłącznie operacji atomowych.
Źródło: opennet.ru