Soy un principiante en C. Al leer el código fuente de git, encontré esta función de envoltura alrededor de malloc
.Envasado malloc - C
void *xmalloc(size_t size)
{
void *ret = malloc(size);
if (!ret && !size)
ret = malloc(1);
if (!ret) {
release_pack_memory(size, -1);
ret = malloc(size);
if (!ret && !size)
ret = malloc(1);
if (!ret)
die("Out of memory, malloc failed");
}
#ifdef XMALLOC_POISON
memset(ret, 0xA5, size);
#endif
return ret;
}
Preguntas
- no podía entender por qué están utilizando
malloc(1)
? - Qué hace
release_pack_memory
y no puedo encontrar esta implementación de funciones en todo el código fuente. - ¿Qué hace el
#ifdef XMALLOC_POISON memset(ret, 0xA5, size);
?
Estoy planeando volver a utilizar esta función en mi proyecto. ¿Es esto una buena envoltura alrededor de malloc
?
Cualquier ayuda sería genial.
Kudos para leer el código de programas complejos existentes - Me gustaría que más desarrolladores hicieron eso. – Lars
Para la pregunta 2: Su definición está en sha1_file.c (se supone que la memoria tiene que ver con los objetos del paquete de git) y su prototipo está en git-compat-util.h. (Sugerencia: ¡siempre que esté buscando el código fuente de git, use 'git grep release_pack_memory' para encontrarlo!) – Cascabel
@Lars: Gracias. @Jefromi: Buen punto sobre 'git grep'. –