Sono un principiante in C. Durante la lettura del codice sorgente di git, ho trovato questa funzione wrapper attorno a malloc
.Involucro 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;
}
Domande
- non riuscivo a capire perché stanno usando
malloc(1)
? - Cosa fa
release_pack_memory
e non riesco a trovare questa implementazione di funzioni nell'intero codice sorgente. - Cosa fa il
#ifdef XMALLOC_POISON memset(ret, 0xA5, size);
?
Sto progettando di riutilizzare questa funzione sul mio progetto. Si tratta di un buon wrapper intorno a malloc
?
Qualsiasi aiuto sarebbe fantastico.
Complimenti per la lettura del codice di programmi complessi già esistenti - Vorrei che più sviluppatori hanno fatto questo. – Lars
Per la domanda 2: La sua definizione è in sha1_file.c (è compito della memoria fare con gli oggetti del pacchetto git, presumibilmente) e il suo prototipo è in git-compat-util.h. (Suggerimento: se stai cercando il codice sorgente di git, usa 'git grep release_pack_memory' per trovarlo!) – Cascabel
@Lars: Grazie. @Jefromi: buon punto su 'git grep'. –