Как сделать, чтобы память возвращалась системе?
От: Аноним  
Дата: 23.02.10 00:57
Оценка:
Программа работает по итерациям. В пределах одной итерации, заполняются некоторые структуры данных. Используется STL (string, map, vector и т. п.). Также используются потоки (пул из n штук по количеству ядер, каждый обрабатывает, как правило, по 1/n части какого-нибудь map-а). Между итерациями все основные структуры уничтожаются (остаётся небольшой объём данных). Как правило, между итерациями, размер RSS (используемой физической памяти) и VIRT (размер адресного пространства) не уменьшается или уменьшается очень незначительно. В некоторых случаях удавалось добиться, чтобы память отдавалась ОС, но я пока не разобрался, что на это влияет. Получается, что размер используемой памяти остаётся равным максимальному размеру, который требуется для одной итерации. Дело происходит под Linux (Ubuntu), amd64, gcc 4.3.

Вопросы:
— почему так происходит; в каких случаях, вообще, память должна возвращаться системе? (вариант с перезапуском программы не рассматриваем);
— можно ли добиться ожидаемого результата, если использовать другие аллокаторы (которые заменяют malloc), если да — то какие?
— можно ли добиться ожидаемого результата, если использовать другие аллокаторы для STL, если да, то какие, и в какие контейнеры их стоит ставить?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.