[Python-es] Asignación de memoria dinámica (malloc/free) en Python

Francesc Alted faltet en pytables.org
Mie Sep 29 16:24:52 CEST 2010


A Wednesday 29 September 2010 14:30:07 Angel Guzman Maeso escrigué:
> El 29 de septiembre de 2010 12:41, Santi Saez <santisaez en woop.es> 
escribió:
> > rre que puede estar pasando o como podría hacer debug? strace no
> > está
> > 
> > aportando mucha información:
> >        (..)
> >        write(1, "1 MB\n", 51 MB)                   = 5
> >        --- SIGSEGV (
> 
> Hola Santi,
> 
> Lo siguiente es solo una teoría, puede incluso que sea algo
> equivocado, pero, podría ser que estuvieras cogiendo libc.so.6 de
> lib64/ en vez de lib32?
> 
> No se exactamente si al hacer libc = CDLL('libc.so.6') coja la de 32
> bits por estar en path de forma prefente.
> 
> Quizás poniendo la ruta completa a la biblioteca no te problemas
> (como digo es solo una suposición).

Si, probablemente es eso lo que le pasa a Angel.  De todas maneras, usar 
el malloc 'a pelo' no hace falta.  Mejor usa algo más independiente de 
platforma, como `ctypes.create_string_buffer`:

>>> ctypes.create_string_buffer(int(3e6))
<ctypes.c_char_Array_3000000 object at 0xdf1dd0>

>>> ctypes.create_string_buffer(int(3e10))
---------------------------------------------------------------------------
MemoryError                               Traceback (most recent call 
last)

/tmp/serialization/<ipython console> in <module>()

/usr/local/lib/python2.6/ctypes/__init__.pyc in 
create_string_buffer(init, size)
     64     elif isinstance(init, (int, long)):
     65         buftype = c_char * init
---> 66         buf = buftype()
     67         return buf
     68     raise TypeError(init)

MemoryError: 

-- 
Francesc Alted


Más información sobre la lista de distribución Python-es