我想在代码中使用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;
}
Run Code Online (Sandbox Code Playgroud)
但是release_pack_memory函数在sha1_file.c头文件中,这个函数引用了Git代码中其他头文件中的函数,我不想花费太多精力从Git的代码库中隔离这个函数.目前我正在为release_pack_memory函数寻找替代函数,或者你能推荐我另一种选择.我会感激任何帮助
你为什么要使用Git的malloc包装器?你明白它在做什么吗?如果是这样,为什么你认为你需要对release_pack_memory进行"替换"?
所有这个包装器确实*,如果malloc失败,它会尝试释放它用于缓存的一些内存(这是什么release_pack_memory),然后再次尝试.如果你没有任何内存缓存,那么复制这个包装器真的没有意义(如果你确实有内存缓存,那么你应该已经知道如何从中释放内存而不必复制这个函数).
*它还包含size对不支持的平台上的if 为0 的检查malloc(0),如果这是您关心的问题,那么release_pack_memory的内容仍然无用.