Это очень трудно, в общем, для процесса, чтобы «дать память обратно в ОС» (пока процесс не завершится и ОС получает обратно все память, конечно), потому что (в большинстве реализации), что malloc
для повышения эффективности выходы из больших блоков вырезаны из больших блоков, но весь блок не может быть возвращен, если какая-либо его часть все еще используется, поэтому большинство стандартных библиотек C даже не пытаются.
Для достойного обсуждения в контексте Python см., Например, here. Эван Джонс исправил некоторые проблемы, связанные с Python, как описано here и here, но его патч находится в багажнике с Python 2.5, поэтому проблемы, которые вы наблюдаете, определенно связаны с системным пакетом malloc, а не с Python как таковым. Специфическое для 2.6 объяснение - here и here.
Воздействию SO нить here, где Хью Аллен в своем ответе приводит Firefox программистам удлинять, что Mac OS X представляет собой систему, где это в принципе невозможно для процесса, чтобы дать память обратно в ОС.
Таким образом, только завершая процесс, вы можете освободить его память. Например, долговременный сервер может время от времени удалять свое состояние на диск и закрывать его (с помощью крошечного сторожевого таймера, системы или обычая, наблюдать за ним и перезапускать его). Если вы знаете, что следующая операция займет много времени на короткое время, часто вы можете os.fork
, выполнять голографическую работу в дочернем процессе и получать результаты (если есть), возвращенные родительскому процессу через канал, как дочерний процесс завершается. И так далее.
Почему вы ожидаете, что он спустится? Какую ОС вы используете? Во многих ОС, как только процесс приобрел память, процесс остается таким большим. –
i m используя mac osx 10.5, я верю, что в дальнейшем он будет больше пространства. в настоящее время он вырос примерно на 15 Мбайт больше с 24 МБ на начальном этапе. Я полагаю, что память процесса должна расти с точки зрения MB, которая может повлиять на доступный размер памяти. – herby