[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