Ответ 1
jemalloc
впервые появился для FreeBSD, детищем одного "Джейсона Эванса", отсюда "je". Я бы высмеял его за то, что он был эгоистичным, если бы я ни разу не написал операционную систему под названием paxos
: -)
Подробнее см. этот PDF. Это технический документ, в котором подробно описывается, как работают алгоритмы.
Основным преимуществом является масштабируемость в многопроцессорных и многопоточных системах, достигнутых, частично, с использованием нескольких арен (куски необработанной памяти, из которых сделаны выделения).
В однопоточных ситуациях нет реальной выгоды для нескольких арен, поэтому используется одна арена.
Однако в многопоточных ситуациях создаются многие арены (в четыре раза больше арене, чем есть процессоры), и потоки назначаются этим аренам с округлой маской.
Это означает, что конфликт блокировок может быть уменьшен, поскольку, хотя несколько потоков могут вызывать malloc
или free
одновременно, они будут бороться только в том случае, если они разделяют одну и ту же арену. Две нити с разными аренами не будут влиять друг на друга.
Кроме того, jemalloc
пытается оптимизировать локальность кэша, поскольку действие извлечения данных из ОЗУ происходит намного медленнее, чем использование данных, уже находящихся в кэшах ЦП (принципиально не отличается от разницы между быстрой выборкой из ОЗУ по сравнению с медленной выборкой с диска). С этой целью сначала он пытается минимизировать использование памяти, так как это скорее всего гарантирует, что весь рабочий набор приложения находится в кеше.
И, если этого не может быть достигнуто, он пытается обеспечить, чтобы распределения были смежными, поскольку совместно используемая память имеет тенденцию использоваться вместе.
Из белой бумаги эти стратегии, похоже, дают схожую производительность с современными алгоритмами для однопоточного использования, предлагая улучшения для многопоточного использования.