Google опубликовал новый вариант системы распределения памяти TCMalloc

Кoмпaния Google прeдстaвилa нoвый вaриaнт систeмы рaспрeдeлeния пaмяти TCMalloc, кoтoрaя испoльзуeтся вo мнoгиx внутрeнниx прoeктax Google. Кoд TCMalloc нaписaн нa С++ и рaспрoстрaняeтся пoд лицензией Apache. Чтобы работы требуется наличие компилятора с поддержкой C++17 пользу кого языка C++, и C11 для языка Си (gcc 9.2+ иначе clang 9.0+). Из операционных систем поддерживается токмо Linux (x86, PPC). Примечательно, что с 2005 лета существует ещё один вариант tcmalloc, кто поставлялся в составе пакета gperftools (Google Performance Tools). Сие два разных проекта, имеющих общие истоки. Новый TCMalloc является скорее попыткой раскрыть код актуальных внутренних наработок Google, а он пока не нацелен получи и распишись предоставление стабильного ABI и поддержку широкого спектра операционных систем. Эскорт старого tcmalloc из gperftools закругляйтесь продолжено, но новые возможности, такие на правах привязка кеша к CPU, в него переносить неважный (=маловажный) планируется. TCMalloc включает реализацию Си-функции malloc() и С++ оператора "new", оптимизированных угоду кому) достижения высокой производительности и применения в многопоточных приложениях. TCMalloc и предоставляет возможности интроспекции и профилирования, позволяющие приложению подхватить подробные сведения об использовании памяти в куче. В коде применяются оптимизации для основе современных возможностей языка C++, таких (языко оператор delete с указанием размера с C++14 и выделение памяти с выравниванием с C++17. Кеш избавлен от блокировок и работает в привязке к ядрам CPU, да откатывается на модель кеширования в привязке к потокам в случае отсутствия необходимой функциональности в ядре ОС (соединение кеша к CPU работает только в свежих ядрах Linux). Основные особенности TCMalloc: Быстрое экскреция и освобождение памяти с использованием кеширования. Квалифицированная операций выделения памяти не требуют блокировки, яко обеспечивает хорошую масштабируемость для многопоточных приложений с высоким параллелизмом выполнения работ; Гибкое эксплуатация памяти, позволяющее повторно использовать освобождённые области памяти пользу кого объёктов различного размера или возвращать кэш операционной системе; Низкие накладные траты на каждый объект за приговор выделения страниц объектов одинакового размера и эффективное в области представление мелких объектов. Поддерживаются логичкеские страницы, размером 4KiB, 8KiB, 32KiB и 256KiB. За примером далеко ходить не нужно, при запросе блоков в 512 байт памяти, закругляйся выделена целая страница 4KiB под 512 байтовые объекты, в которой сможет уписаться 8 таких объектов; Возможна тонкая наладка через определения размера кеша и параметров интенсивности возвращения памяти в ОС; Выдача детальной информации для анализа использования памяти приложением. Мать: http://www.opennet.ru/opennews/art.shtml?num=52364