mimalloc: Microsoft снова изобретает колесо, но на этот раз оно квадратное и очень быстрое
Microsoft представила mimalloc — быстрый и масштабируемый аллокатор памяти, который может ускорить ваш код без танцев с бубном.

Команда Microsoft Research выпустила новый аллокатор памяти под названием mimalloc, который обещает быть быстрым, масштабируемым и готовым к современным нагрузкам. Если вы думали, что malloc и его друзья уже достаточно хороши, то приготовьтесь удивляться — или скептически хмыкать, как обычно.
Что за зверь и с чем его едят?
mimalloc (сокращение от 'microsoft memory allocator' — да, они любят длинные имена) позиционируется как замена стандартным аллокаторам в многопоточных приложениях. Он использует технику 'free list sharding' (разделение списков свободной памяти) и специальные оптимизации для NUMA-систем. Простыми словами: если ваша программа активно выделяет и освобождает память в разных потоках, mimalloc может уменьшить накладные расходы и улучшить производительность.
Разработчики утверждают, что mimalloc превосходит такие аллокаторы, как jemalloc, tcmalloc и даже стандартный glibc malloc, особенно в сценариях с высоким конкурентным доступом. Они провели тесты на реальных приложениях (вроде Redis, MariaDB, Apache) и получили прирост производительности от 5% до 30% в зависимости от нагрузки. Звучит как маркетинг? Возможно. Но у них есть бенчмарки, так что не будем спешить с выводами.
Как это работает (кратко для тех, кто не хочет читать 50 страниц документации)
- Free list sharding: вместо одного глобального списка свободных блоков, mimalloc использует множество локальных списков для каждого потока, что снижает contention.
- Ленивое объединение: блоки памяти не сразу возвращаются в глобальный пул, а остаются в локальных кэшах, что ускоряет повторное выделение.
- NUMA-aware: аллокатор учитывает топологию памяти, стараясь выделять память на том же узле, где выполняется поток.
Всё это напоминает подходы из jemalloc, но с некоторыми улучшениями — в частности, mimalloc использует 'page-based' управление и имеет маленький footprint.
Стоит ли переходить?
Если ваше приложение страдает от проблем с производительностью памяти (например, высокий процент времени в malloc/free), то попробовать стоит. mimalloc уже используется в некоторых проектах, включая .NET Core и Azure. И да, он open source (лицензия MIT), так что вы можете просто подменить стандартный аллокатор через LD_PRELOAD или статическую линковку. Но помните: дьявол кроется в деталях, и не все паттерны работы с памятью одинаково хорошо оптимизируются.
Комментарий студии METABYTE: Мы тоже любим погоняться за производительностью, но обычно начинаем с профилирования, а не с замены аллокатора. Хотя mimalloc — отличный инструмент для тех, кто хочет выжать последние кадры в секунду из своего игрового движка или высоконагруженного сервера. Главное — не забыть протестировать на реальных данных, а не только на синтетических бенчмарках, иначе рискуете получить 'ускорение' в тестах и замедление в продакшене.
СЛЕДУЮЩИЙ ШАГ
Понравилось как мыслим?
Применяем те же принципы в клиентских проектах: AI, автоматизации, продукты, которые не умирают после релиза.