Компания Miсrosoft открыла под лицензией MIT библиотеку
Ключевой особенностью mimalloc является компактность реализации (менее, чем 3500 строк кода) и очень высокая производительность. В
Для оценки производительности использован набор уже существующих
Высокая производительность достигается в основном за счёт применения сегментирования списка свободных блоков (free list sharding). Вместо одного большого списка в mimalloc применяется разделение на серию более мелких списков, каждый из которых привязывается к странице памяти. Подобный подход снижает фрагментацию и повышает локализацию данных в памяти. Под страницей памяти понимается сгруппированный набор близких по размеру блоков. На 64-разрядных системах размер страницы обычно составляет 64 КБ. В случае, если в странице не остаётся занятых блоков, она полностью освобождается с возвращением памяти операционной системе, что позволяет снизить затраты памяти и фрагментацию в длительно работающих программах.
Библиотеку можно подключить на этапе связывания или подгрузить для уже собранной программы («LD_PRELOAD=/usr/bin/libmimalloc.so myprogram»). В библиотеке также предоставляется
Предусмотрена возможность сборки библиотеки в безопасном режиме, в котором на границе блоков осуществляется подстановка специальных проверочных страниц памяти (guard-page), а также используется рандомизация распределения блоков и шифрование списков освобождаемых блоков. Подобные меры позволяют блокировать большинство типовых техник эксплуатации переполнений буферов в куче. При включение безопасного режима производительность снижается примерно на 3%.
Из особенностей mimalloc также отмечается не подверженность проблемам с раздутием при большой фрагментации. В наихудшем сценарии потребление памяти возрастает на 0.2% для метаданных и может достигать 16.7% для распределяемой памяти. Для исключения конфликтов при доступе к ресурсам в mimalloc применяются только атомарные операции.
isi: opennet.ru