![]() |
eXeL@B —› Вопросы новичков —› Методика тестирования менеджера памяти |
Посл.ответ | Сообщение |
|
Создано: 02 февраля 2013 12:16 · Личное сообщение · #1 Добрый день! Пишу многопоточный проект на Delphi, число потоков >1000. Для обработки данных используются два типа блоков памяти - базовый блок фиксированного размера (64 байта) и расширенный блок переменного размера. Базовые блоки могут существовать сами по себе, расширенные только "в комплекте" с базовым. Возник интерес сравнить различные менеджеры памяти и выбрать лучший. Требования к менеджеру памяти: 1. Максимально быстрое выделение и освобождение базовых блоков 2. Максимально быстрое (по возможности) выделение и освобождение расширенных блоков 3. Минимальная фрагментация памяти Вопрос - по какой методике сравнивать менеджеры памяти? Есть ли какие-то стандарты? Что приходит в голову: 1. Случайное выделение и освобождение базовых блоков в 1000 (для ровного счета в 1024) потоков. Контролировать рост памяти и время выделения/освобождения в начале и конце теста 2. То же самое с расширенными блоками 3. Выделить блоки размером 64 байта, освободить каждый второй, третий, четвертый. Затем выделить блоки по 128 байт, проконтролировать расход памяти Может есть что-то еще? ![]() |
|
Создано: 02 февраля 2013 16:51 · Личное сообщение · #2 Azur1d пишет: 1. Максимально быстрое выделение и освобождение базовых блоков 3. Минимальная фрагментация памяти Azur1d пишет: 2. Максимально быстрое (по возможности) выделение и освобождение расширенных блоков Если выделение и освобождение происходит всегда в одном потоке, заведи отдельную кучу для каждого потока. Если нет, сделать лучше стандартного heap врядли не получится. P.S. рекомендую сразу отказаться от Delphi, сэкономишь много времени и нервов. ----- PGP key ![]() |
|
Создано: 03 февраля 2013 11:05 · Поправил: Promix_17 · Личное сообщение · #3 Я уж не знаю, но самое эффективное в этом случае - ограничить длину максимального блока исходя из условий задачи. Тогда, если нужно выделить память для расширенного блока, то мы всегда будем выделять больше памяти, чем нужно. Благодаря некоторому перерасходу памяти, получиться сделать очень быстрый менеджер памяти, не подверженный фрагментации. Просто два списка для свободных базовых и расширенных блоков и всё. При выделении берём из из списка, при освобождении добавляем в список. Сейчас сам пишу анологичное, только на чистом C. ![]() |
|
Создано: 03 февраля 2013 12:08 · Личное сообщение · #4 |
|
Создано: 03 февраля 2013 14:12 · Личное сообщение · #5 |
|
Создано: 03 февраля 2013 21:29 · Личное сообщение · #6 |
|
Создано: 03 февраля 2013 21:36 · Поправил: reversecode · Личное сообщение · #7 |
![]() |
eXeL@B —› Вопросы новичков —› Методика тестирования менеджера памяти |