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

时间:2010-07-06 07:06:13

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

1 个答案:

答案 0 :(得分:5)

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

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


*它还包含在不支持size的平台上检查malloc(0)是否为0的情况,如果这是您关注的问题,那么release_pack_memory的内容仍然无用。