A Tuesday 28 September 2010 13:22:21 Santi Saez escrigué:
> Hola,
> 
> Quería preparar un script en Python que hiciera uso de las funciones
> de C/C++ malloc(), free(), etc. El objetivo es obtener la cantidad
> máxima de memoria que puede asignar un proceso para comprobar si los
> limites del entorno virtualizado donde se ejecuta estan funcionando
> bien.
> 
> Una aproximación en C sería la siguiente, donde básicamente se van
> incrementan los bytes a asignar hasta que devuelve NULL:
> 
>       http://pastebin.com/R2wjFaRw
> 
> He estado Googleando pero no encuentro forma de trabajar directamente
> con la memoria, ni equivalentes a malloc/free, etc. ¿Existe alguna
> forma de hacer un malloc() desde Python

Existen muchas, sí.  Una que es bastante fácil es el módulo array:

In [31]: a = array.array('c', "a"*1000)

In [32]: a.buffer_info()
Out[32]: (17147232, 1000)   # dirección de memoria y su longitud (bytes)

Usando el ctypes, además puedes incluso hacer cosas como copiar bytes de 
una dirección a otra:

In [33]: b = array.array('c', "b"*1000)

In [35]: b[:10]
Out[35]: array('c', 'bbbbbbbbbb')

In [36]: ctypes.memmove(b.buffer_info()[0], a.buffer_info()[0], 
len(a)*a.itemsize)
Out[36]: 17148240

In [37]: b[:10]
Out[37]: array('c', 'aaaaaaaaaa')   # memoria de a copiada a b

> y en caso de no existir se
> os ocurre alguna forma de determinar la memoria máxima que podría
> asignar un script en Python?

Hombre, lo de arriba es pura fuerza bruta.  Dependiendo de tu OS, hay 
métodos más 'saludables'.  Por ejemplo, para Linux yo simplemente haria 
un comando 'free' y miraria la memoria libre.

-- 
Francesc Alted
_______________________________________________
Python-es mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a