Как правило, процессу очень трудно "вернуть память ОС" (пока процесс не завершится и ОС не вернет всю память, конечно), потому что (в большинстве реализаций) то, что возвращает malloc
, вырезано из больших блоков для эффективности, но весь блок не может быть возвращен, если какая-то его часть все еще используется - так, большинство стандартных библиотек C даже не пытаются.
Для достойного обсуждения в контексте Python см., Например, здесь .Эван Джонс исправил некоторые специфичные для Python проблемы, как описано здесь и здесь , но его патч находится в стволе начиная с Python 2.5, поэтому проблемы, которые вы наблюдаете, определенно связаны с системой mallocпакет, а не с Python как таковой.Специфичное для 2.6 объяснение: здесь и здесь .
Поток SO равен здесь , где Хью Аллен в своем ответе цитирует программистов Firefox:До тех пор, пока Mac OS X не является системой, в которой невозможно для процесса, чтобы вернуть память операционной системе.
Таким образом, только завершая процесс, вы можете быть уверены, что освободите его.объем памяти.Например, длительно работающий сервер может время от времени снимать свое состояние на диск и выключаться (с помощью крошечного сторожевого процесса, системного или пользовательского, отслеживая и перезапуская его).Если вы знаете, что следующая операция будет занимать много памяти в течение короткого времени, часто вы можете os.fork
, выполнить работу с памятью в дочернем процессе и получить результаты (если таковые имеются), возвращаемые родительскому процессу черезтруба как дочерний процесс завершается.И так далее, и так далее.