"Help needed - I don't understand how Python manages memory"

sturlamolden sturlamolden at yahoo.no
Sun Apr 20 22:19:43 CEST 2008


On Apr 20, 9:09 pm, "Hank @ITGroup" <hank.info... at gmail.com> wrote:

> Could you please give us some clear clues to obviously call python to
> free memory. We want to control its gc operation handily as we were
> using J**A.

If you want to get rid of a Python object, the only way to do that is
to get rid of every reference to the object. This is no different from
Java.

If you just want to deallocate and allocate memory to store text,
Python lets you do that the same way as C:


from __future__ import with_statement
import os
from ctypes import c_char, c_char_p, c_long, cdll
from threading import Lock

_libc = cdll.msvcr71 if os.name == 'nt' else cdll.libc
_lock = Lock()

def string_heapalloc(n):
    ''' allocate a mutable string using malloc '''
    with _lock:
        malloc = _libc.malloc
        malloc.argtypes = [c_long]
        malloc.restype = c_char * n
        memset = _libc.memset
        memset.restype = None
        memset.argtypes = [c_char * n, c_char, c_long]
        tmp = malloc(n)
        memset(tmp,'0',n)
    return tmp

def string_heapfree(s):
    ''' free an allocated string '''
    with _lock:
        free = _libc.free
        free.restype = None
        free.argtypes = [c_char_p]
        ptr_first_char = c_char_p( s[0] )
        free(ptr_first_char)


if __name__ == '__main__':
    s = string_heapalloc(1000)
    s[:26] = 'abcdefghijklmnopqrstuvwxyz'
    print s[:]
    string_heapfree(s)




More information about the Python-list mailing list