У меня есть программа на С++, которая во время выполнения выделяет около 3-8 ГБ памяти для хранения хеш-таблицы (я использую tr1/unordered_map) и других других структур данных.
Однако, в конце выполнения, перед возвратом в оболочку будет долгая пауза.
Например, в самом конце моей основной функции у меня есть
std::cout << "End of execution" << endl;
Но выполнение моей программы будет похоже на
$./program
делать вещи...
Конец исполнения
[длительная пауза, возможно, 2 минуты]
$ - возвращает в оболочку
Является ли это ожидаемым поведением или я делаю что-то неправильно?
Я предполагаю, что программа освобождает память в конце. Но коммерческие приложения, использующие большие объемы памяти (например, фотошоп), не демонстрируют эту паузу при закрытии приложения.
Просьба сообщить:)
Изменить: самая большая структура данных - это unordered_map
с ключом string
и сохраняет list
integers
.
Я использую g++ -O2
в linux, компьютер, который я использую, имеет 128 ГБ памяти (с большей частью этого бесплатно). Есть несколько гигантских объектов
Решение: я в конечном итоге избавился от хеш-таблицы, так как в любом случае он был почти полным. Это решило мою проблему.