TCMalloc включает реализацию Си-функции malloc() и С++ оператора «new», оптимизированных для достижения высокой производительности и применения в многопоточных приложениях. TCMalloc также предоставляет возможности интроспекции и профилирования, позволяющие приложению получить подробные сведения об использовании памяти в куче. В коде применяются оптимизации на основе современных возможностей языка C++, таких как оператор delete с указанием размера из C++14 и выделение памяти с выравниванием из C++17.
TCMalloc состоит из трёх компонентов: фронтэнда с кэшем для быстрого выделения и освобождения памяти, прослойки для наполнения кэша фронтэнда и бэкенда, выполняющего такие операции, как получение памяти от операционной системы, управления большими кусками неиспользованной памяти и возвращение лишней памяти обратно в ОС. Кэш избавлен от блокировок и работает в привязке к ядрам CPU, но откатывается на модель кэширования в привязке к потокам в случае отсутствия необходимой функциональности в ядре ОС (привязка кэша к CPU работает только в свежих ядрах Linux). Бэкенд поддерживает работу как с обычными страницами памяти, так и со страницами увеличенного размера (hugepage).
Основные особенности TCMalloc:
- Быстрое выделение и освобождение памяти с использованием кэширования. Большинство операций выделения памяти не требуют блокировки, что обеспечивает хорошую масштабируемость для многопоточных приложений;
- Гибкое использование памяти, позволяющее повторно использовать освобождённые области памяти для объёктов различного размера или возвращать память операционной системе;
- Низкие накладные расходы на каждый объект за счёт выделения страниц объектов одинакового размера и эффективное по представление мелких объектов;
- Предоставление детальной информации для анализа использования памяти приложением.
Источник: http://www.opennet.ru/opennews/art.shtml?num=52364