Возможно, потому что имеет смысл оптимизировать распределение за счет освобождения, потому что многие приложения выделяют без освобождения, но никогда не наоборот.Я сам видел подобный шаблон в приложении, которое смешало вызовы к malloc
и free
(в отличие от выделения и освобождения всех сразу).
Я никогда не писал распределитель кучитак что я не знаю, есть ли более глубокая техническая причина, чем это.При освобождении смежные свободные блоки должны быть найдены и объединены.Так что работа просто принципиально другая.
90 секунд для 1 миллиона маленьких free()
звуков довольно медленные.Я никогда не программировал Windows, так что я не могу сказать, что это ненормально, но система должна быть способна работать намного лучше.
Решением вашей проблемы может быть просто пропустить освобождение объектов перед программойвыходы.Вы можете попробовать извлечь пользовательский распределитель из std::allocator< unsigned int >
, что делает deallocate
запретом.