Компанія 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% для пам'яті, що розподіляється. Для унеможливлення конфліктів при доступі до ресурсів у мімольок застосовуються тільки атомарні операції.
Джерело: opennet.ru