А у Вас все объекты разного размера или есть известное множество возможных размеров?
Все размеры недетерминированные. Большая часть - строки
-- 16.11.2015, 14:23 --Это вы про buddy allocator (метод напарников) говорите? Если так, то теоретически вместо степеней 2 можно использовать числа Фибоначчи. Я, правда, ни серьезных обсуждений, ни реализаций не видел. По моим прикидкам вместо внутренней фрагментации в этом случае получается внешняя. Короче, шило на мыло, и много доп. возни.
Да, про него. Я его пробовал и пробовал его модификацию с вилкой по оверхеду, сохраняющую верхнюю границу по сложности в логарифм. Но на практике оказалось, что даже оригинал недостаточно быстр - для поиска места для маленьких объектов приходится спускаться сквозь всю кучу.
Но мне другое любопытно. Это что же за задачи Вы хотите решать.
Ну, то есть, если у вас объекты всего лишь с полсотни байт, то речь идет уже о сотнях Гиг памяти.
Задач несколько, самая больная - это специфический HTTP-сервер, обрабатывающий большое число обращений. На каждое обращение создается довольно сложный ответ. Большая часть выделяемых элементов - маленькие строки из различных темплейтов и чисел.
Средний размер блока значительно меньше, чем пол сотни байт. Общий полезный размер кучи болтается в районе 20-30GB
Да и программа, похоже, вместо содержательной работы занимается только лишь выделением памяти и ее освобождением. А еще и синхронизация между потоками. А что там по этому поводу "железо" думает?
Не все время, но ориентировочно больше половины. Однопоточный менеджер памяти однозначно становится узким звеном, т.к. остальная работа сравнительно легко параллелится. Ситуацию частично исправляет использование пулов с несколькими наперед заданными фиксированными размерами объектов - сложность падает до
, но оверхед увеличивается. Помимо нехватки памяти, в наиболее активном участке 'котла', где все безумно варится, появляется нелинейная просадка по скорости, связанная с нехваткой кеша памяти какого-то из уровней.
Железо трещит
Преимущественно - это ферма из EX40 серверов в Hetzner. Там по 32GB на i7-4770 стоит.
Для управления такими потоками данных желание использовать "классический менеджер памяти" выглядит как-то странно.
Вы не подумайте чего плохого. Мне в самом деле любопытно. Где Вы собираетесь использовать такую "кувалду"?
Да вот классический и плохо справляется. А при использовании всякого шаманства приходится много думать и следить, что б шаманство оставалось работоспособным