Malloc против пользовательского распределителя: Malloc имеет много накладных расходов. Зачем?

У меня есть приложение для сжатия изображений, которое теперь имеет две разные версии систем выделения памяти. В первоначальном случае malloc используется везде, а во втором я реализовал простой пул-распределитель, который просто выделяет кусок памяти и возвращает части этой памяти вызовам myalloc ().

Мы'при использовании malloc мы замечаем огромные накладные расходы памяти: на пике использования кода памяти malloc () требует около 170 мегабайт памяти для образа 1920x1080x16bpp, а распределитель пула выделяет только 48 мегабайт, из которых 47 используются по программе.

С точки зрения шаблонов распределения памяти, программа выделяет много 8-байтовых (большинство), 32-байтовых (много) и 1080-байтовых блоков (некоторые) с тестовым изображением. Кроме этого, в коде нет динамического выделения памяти.

ОС системы тестирования - Windows 7 (64-разрядная).

Как мы тестировали использование памяти?

С помощью специального распределителя мы могли видеть, сколько памяти используется, потому что все вызовы malloc передаются распределителю. С помощью malloc () в режиме отладки мы просто пошагово просматривали код и наблюдали за использованием памяти в диспетчере задач. В режиме релиза мы сделали то же самое, но менее детально, потому что компилятор оптимизировал многие вещи, поэтому мы не моглипошагово проходить по коду (разница памяти между выпуском и отладкой составляла около 20 МБ, что я бы приписал оптимизации и отсутствию отладочной информации в режиме выпуска).

Может ли один только Маллок быть причиной таких огромных накладных расходов? Если так, что именно вызывает эти издержки внутри malloc?

Ответы на вопрос(3)

Ваш ответ на вопрос