To bardzo trudne, w ogóle, za to proces „dać pamięci z powrotem do systemu operacyjnego” (aż proces kończy i OS wróci wszystko pamięć, oczywiście), ponieważ (w większości implementacji) co malloc
zwroty są wycięte z dużych bloków dla zwiększenia wydajności, ale cały blok nie może zostać zwrócony, jeśli jakakolwiek jego część jest nadal używana - tak więc większość standardowych bibliotek C nawet nie próbuje.
Aby uzyskać dobrą dyskusję w kontekście Python, zobacz np. here. Evan Jones naprawił niektóre problemy specyficzne dla Pythona, jak opisano w tym artykule: here i here, ale jego łatka znajduje się w pniu od Pythona 2.5, więc problemy, które obserwujesz, są zdecydowanie związane z pakietem systemowym malloc, a nie z Pythonem per se. Wyjaśnienie specyficzne dla wersji 2.6 to here i here.
tak wątek jest here, gdzie Hugh Allen w swojej odpowiedzi cytuje programistów Firefoksa w zakresie, Mac OS X to system, w którym to w zasadzie niemożliwedla procesu dać pamięci z powrotem do systemu operacyjnego.
Tak więc, tylko poprzez zakończenie procesu możesz mieć pewność, że zwolnisz jego pamięć. Na przykład długo działający serwer może co jakiś czas przechwytywać jego stan na dysk i wyłączać go (z niewielkim procesem watchdoga, systemem lub niestandardowym, oglądając go i uruchamiając go ponownie). Jeśli wiesz, że następna operacja zajmie dużo pamięci przez krótki czas, często możesz os.fork
, wykonać żądaną pamięć pracę w procesie potomnym, a wyniki (jeśli są) powrócić do procesu nadrzędnego za pomocą potoku proces potomny zostaje zakończony. I tak dalej i tak dalej.
Dlaczego miałbyś oczekiwać, że zejdzie? Z jakiego systemu operacyjnego korzystasz? W wielu systemach operacyjnych, gdy proces uzyskał pamięć, proces pozostaje tak duży. –
Używam mac osx 10.5, wierzę, że później zjem więcej miejsca. obecnie wzrosła o około 15 MB z 24 MB w początkowej fazie. Uważam, że pamięć procesowa powinna rosnąć pod względem MB, co może wpłynąć na dostępny rozmiar pamięci. – herby