
Спустя почти четыре года после предыдущего крупного релиза состоялся долгожданный выпуск версии 5.3.1 популярного аллокатора памяти jemalloc. Данная реализация malloc(3) традиционно делает главный акцент на эффективном предотвращении фрагментации памяти и обеспечении высокой масштабируемости в многопоточных приложениях.
Свежий релиз вобрал в себя свыше 390 разнообразных коммитов. Они включают в себя исправления накопленных ошибок, внедрение новых полезных функций, общую оптимизацию производительности, а также значительное улучшение переносимости между различными платформами.
Сам проект написан на классическом языке программирования Си и распространяется под свободной лицензией BSD.
Ключевые нововведения и изменения в версии 5.3.1:
- реализована полноценная поддержка функции pvalloc(3);
- добавлен механизм надежного обнаружения двойного освобождения памяти (double free) в специальных отладочных сборках;
- представлена новая опция компиляции
--enable-pageid, предназначенная для включения удобной аннотации отображаемой памяти; - добавлен новый runtime-параметр
prof_bt_max, позволяющий гибко управлять максимальной глубиной стека вызовов для профилирования; - появилась опция компиляции
--enable-force-getenvдля принудительного использования стандартной getenv вместо безопасной secure_getenv; - добавлена опция компиляции
--disable-dss, полностью отключающая применение системного вызова sbrk(2); - введена опция компиляции
tcache_ncached_maxдля тонкой настройки максимального количества элементов в локальном кеше потоков; - интегрирован runtime-параметр
calloc_madvise_threshold, который определяет, задействуется ли ядро операционной системы или классический memset для обнуления выделенных блоков памяти при вызове calloc; - добавлена опция компиляции
--disable-user-config, отключающая чтение пользовательских конфигурационных файлов из/etc/malloc.confили из переменной окруженияMALLOC_CONFво время выполнения программы; - представлен runtime-параметр
disable_large_size_classes, обеспечивающий работу инновационного алгоритма расчета доступного размера. Он существенно минимизирует накладные расходы памяти при распределении крупных блоков (при размере памяти больше либо равном4 * PAGE); - активировано использование системного вызова
process_madvise, а также добавлен полезный runtime-параметрprocess_madvise_max_batchдля точного контроля максимального числа регионов памяти в каждой отдельной «пачке» madvise; - расширен и дополнен набор интерфейсов mallctl, куда вошли:
opt.prof_bt_max;arena.<i>.nameдля изменения и получения пользовательских имён конкретной арены;thread.tcache.maxдля управления параметром tcache_max текущего потока;thread.tcache.ncached_max.writeиthread.tcache.ncached_max.read_sizeclassдля работы с лимитами ncached_max активного потока;arenas.hugepageдля возвращения актуального размера hugepage, который также успешно экспортируется в общую статистику malloc;approximate_stats.activeдля быстрого получения приблизительного объема активных байтов (полученные данные не рекомендуется напрямую сравнивать с другими статистическими показателями).
- проведена масштабная работа по устранению множества мелких дефектов и улучшению сопутствующей технической документации.
Подробности проекта можно найти на официальной странице разработчиков на GitHub.






