Thursday, October 22, 2009

TCMalloc отличие от стандартного алгоритма

Отличие от стандартного алгоритма управления выделением памяти glibc(ptmalloc2)от tcmalloc(реализация разработчиков google):
  • разделенная между потоками память, у каждого потока собственный пул памяти(уменьшена вероятность взаимоблокировок);
  • все объекты одинакового размера хранятся вместе (позволяет эффективно использовать память в процессе выделения - освобождения памяти).
  • скорость 50 наносекунд против 300 наносекунд (единичное создание удаление объекта (2.8 GHz P4).
Общий принцип работы: при каждом запросе на выделение памяти - память выделяется из общего пула и привязывается к потоку, который эту память запросил, в потоку регистрируется пул под объекты этого размера(класса) размером кратным размеру страницы, в результате следующее выделение будет выполнено в уже привязанной к потоку памяти. Когда пул под объекты определенного класса освобождается он возвращается в основной пул. Для объектов больше определенного размера выделение полностью проводиться в основном пуле без привязке к конкретному потоку (большая вероятность что этот объект будет использован в другом потоке).

No comments: