Я хочу использовать оболочки gall's malloc и realloc в моем коде для условий OOM (из памяти). Вот его код:Как я могу использовать оболочку malloc Git в моем коде?
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;
}
но release_pack_memory функция находится в sha1_file.c заголовочном файле и эта функция есть ссылки на функции в других файлах заголовков в коде Git, и я не хотел поставить столько усилий для изоляции этого функции из кодовой базы Git. На данный момент я ищу альтернативную функцию для функции release_pack_memory, или вы можете порекомендовать мне другую альтернативу. Я буду благодарен за любую помощь
Да, я думал, что понял этот код. Но я пропустил тот факт, что он освобождался от своего собственного кеша :). И у меня есть тайники в памяти. – systemsfault
@systemsfault: конечно, логика в основном просто «если« malloc »терпит неудачу, освободите байты размером« size »из кеша и повторите попытку». –
Нет, проверка размера 0 не для платформ, которые не поддерживают malloc (0). Именно для вызывающих абонентов ожидают глупое поведение GNU по возврату указателя non-NULL на malloc (0). Большинство здравомыслящих людей согласны, что лучше всего malloc (0) вернуть NULL. –