Yuanxin Xi wrote: > Could anyone please explain why this happens? It seems some memory > are not freed. I'm running into problems with this as my program is > very memory cosuming and need to frequently free some object to reuse > the memory. What is the best way to free the memory of b completely > (i.e. back to the status as b was created)? I'm using Python 2.5.2
Python uses malloc() and free() to allocate memory on the heap. Most malloc() implementations don't give back memory to the system. Instead the memory segment is still assigned to the process. In order to give back memory to the system pool, a memory manager has to use mapped memory (mmap()) instead of increasing the heap by changing the data segment size with brk(). This isn't a Python flaw but a general issue with malloc() based memory management. [1] By the way Python has its own memory management system on top of the system's malloc() system. The memory arena system is explained in great detail in the file obmalloc.c [2]. Christian [1] http://en.wikipedia.org/wiki/Malloc#Implementations [2] http://svn.python.org/view/python/branches/release25-maint/Objects/obmalloc.c?revision=65261&view=markup -- http://mail.python.org/mailman/listinfo/python-list