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/