More Related Content Similar to Правильная работа с динамической памятью в высоконагруженных проектах (Максим Пугачев) Similar to Правильная работа с динамической памятью в высоконагруженных проектах (Максим Пугачев) (20) Правильная работа с динамической памятью в высоконагруженных проектах (Максим Пугачев)1. Пугачев Максим
IPONWEB
Правильная работа с
динамической памятью в
высоконагруженных проектах
3. О докладе
• Обзор существующих алгоритмов
• Как выбрать?
• Многопоточность
• Подводные камни и best-practices
4. С чего все началось
250
200
150
glibc
100 tcmalloc
50
0
1 thread 5 threads
7. Цели аллокатора
• Совместимость
• Кроссплатформенность
• Минимизация памяти
• Максимизация производительности
• Кастомизация
• Обработка ошибок
15. Алгоритм
• Выделить 1GB при помощи brk()
• Разбить на массивы чанков (8, 16, 32, …)
• Округлять до ближайшего чанка и отдавать
указатель на него
17. Алгоритм
• Выделить 1GB при помощи brk()
• Разбить на списки чанков
• Округлять до ближайшего чанка и отдавать
указатель на него
• Если список пуст, то брать из соседнего
19. Алгоритм
• Выделить 1GB при помощи brk()
• Округлить до ближайшего чанка и отдавать
указатель на него
• Если список пуст, отрезать от
мегачанка, сделать список и отдать 1
элемент
22. dlmalloc
• Doug Lea`s malloc (dlmalloc)
• ptmalloc (per-thread arenas malloc by
Wolfram Gloger) - основан на dlmalloc
25. Суммируем проблемы
• “Средний” вариант
• Overhead служебной информации
• Внутренняя фрагментация
• Многопоточность
38. Спасибо!
Пугачев Максим
IPONWEB
E-mail: sieqer@gmail.com
Skype: pugachev.maxim