Jestem początkujący w C. Podczas czytania kodu źródłowego gita znalazłem tę funkcję otoki wokół malloc
.Owijanie 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;
}
Pytania
- Nie mogłem zrozumieć, dlaczego są one za pomocą
malloc(1)
? - Co robi
release_pack_memory
i nie mogę znaleźć tej funkcji implementacji w całym kodzie źródłowym. - Co robi
#ifdef XMALLOC_POISON memset(ret, 0xA5, size);
?
Mam zamiar ponownie użyć tej funkcji w moim projekcie. Czy to jest dobre opakowanie wokół malloc
?
Każda pomoc będzie świetna.
Kudos do odczytu kodu istniejących złożonych programów - Życzę więcej deweloperów zrobił. – Lars
Na pytanie 2: Jego definicja znajduje się w pliku sha1_file.c (dotyczy pamięci obiektów git, prawdopodobnie), a jego prototyp znajduje się w git-compat-util.h. (Podpowiedź: tak długo, jak patrzysz na kod źródłowy git, użyj 'git grep release_pack_memory', aby go znaleźć!) – Cascabel
@Lars: Thanks. @Jefromi: Dobra uwaga na temat 'git grep'. –