2011-06-26 17 views
11

¿Dónde puedo encontrar el código para malloc que mi compilador gcc está usando en este momento? De hecho, quiero escribir mi propia función malloc, que será un poco diferente de la original. Sé que puedo usar hooks et all, pero quiero ver el código real.Código para malloc y libre

+0

escribe malloc(), luego se llega a la definición. (F12 por lo general) –

+0

Estoy trabajando en Linux y no estoy utilizando ningún depurador. Quiero saber el archivo donde se encuentra. – MetallicPriest

+0

A menos que solo lo hagas como una experiencia de aprendizaje, es una muy mala idea. Buscando con la redefinición de funciones estándar, especialmente algo que es tan básico como malloc, resulta en código frágil y no portátil. –

Respuesta

15

El POSIX interfaz de malloc es defined here.

Si desea averiguar cómo la biblioteca C de GNU/Linux (glibc) implementa malloc, ir a buscar el código fuente de la http://ftp.gnu.org/gnu/glibc/ y mirar el archivo malloc/malloc.c.

Existe también la documentación de base de la Memory Allocator by Doug Lea que describe la teoría de un m (Emory) alloc (Ator) (leer este carrefully, y luego decidir si realmente necesita para implementar su propia malloc).

+4

no sea defensora de FSF/GNU. pero no hay lugar, ya que esto es mejor para enfatizar el hecho de que deberías decir GNU/Linux, ya que estamos buscando exactamente en el código GNU parte de la cosa GNU/Linux ... Espero al menos que Stallman vote el comentario: D – ShinTakezou

+1

@ ShinTakezou: He votado a favor de tu comentario (y corrigió mi respuesta) en caso de que el bot de RMS no haya detectado mi error;) –

+0

+1 para el enlace al texto de Doug Lea –

6

Mire en la versión apropiada de glibc en el old release site o here. Por ejemplo, si está utilizando glib 2.9, está en this archive. Busque el archivo malloc/malloc.c.

Verá que no es una pieza trivial de código de biblioteca.


Parece que cambiaron la estructura de directorios después de glibc-2.9.

1

Puedo buscar la fuente en línea here.

+0

No publique solo las respuestas del enlace. Publique una parte del enlace en la respuesta. –

Cuestiones relacionadas