Я использую std::deque
для хранения довольно большого количества объектов. Если я удалю кучу этих объектов, мне кажется, что его использование памяти не уменьшается, подобно std :: vector.Как выпустить память из std :: deque?
Есть ли способ уменьшить его? Я знаю, что в векторе вы должны использовать «своп-трюк», который, как я полагаю, тоже будет работать здесь, но я бы предпочел избежать этого, поскольку для этого потребуется скопировать все элементы, оставшиеся в контейнере (и, следовательно, достаточно памяти для хранения каждого объекта дважды). Я не знаком с реализацией deque, но мое понимание этого заключается в том, что можно было бы достичь такой вещи без большого количества копий (тогда как с вектором это явно не было).
Я использую STL VC++ (Dinkumware), если это имеет значение.
Установили ли вы, что ваша реализация deque еще не освобождает блоки памяти, как только достаточно элементов для удаления их? Или вы действительно хотите выжать последние несколько байтов, перераспределяя блок на каждом конце? –
Я так думаю, довольно грубо и готово: я добавляю 100 000 предметов -> Использование памяти - 90 МБ. Я добавляю еще 100 000 -> использование памяти ~ 170 МБ. Я удаляю 100 000 элементов -> использование памяти по-прежнему ~ 170 МБ. Добавьте еще 100 000 -> еще 170. Я предполагаю, что 100 000 предметов более чем достаточно, чтобы у него были пустые блоки, которые он бы освободил, если бы собирался. – Peter
Использование памяти в процессе или использование памяти в коллекции? Просто потому, что коллекция освобождает память, это не значит, что она возвращается к ОС, поэтому попробуйте выделить 80MB массива символов после удаления элементов и посмотреть, будет ли использование 250MB, или останется в 170. Извините, если вы уже знаете все это вещи и учли это - миллионы не будут. –