如何在我的代码中使用Git的malloc包装器?

我想在我的代码中使用git的malloc和realloc包装器来处理OOM(内存不足)的情况。 这是它的代码:

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函数的替代函数,或者你能推荐我另一种选择。 我会感谢任何帮助

你为什么要使用Git的malloc包装器? 你明白它在做什么吗? 如果是这样,为什么你认为你需要对release_pack_memory进行“替换”?

所有这个包装器都是*,如果malloc失败,它会尝试释放一些用于缓存的内存(这就是release_pack_memory所做的),然后再次尝试。 如果你没有任何内存缓存,那么复制这个包装器真的没有意义(如果你确实有内存缓存,那么你应该已经知道如何从中释放内存而不必复制这个函数)。

*它还包含一个检查,如果在不支持malloc(0)平台上size为0,如果这是你关心的问题,那么release_pack_memory的东西仍然没用。