我想在代码中使用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的代码基隔离开来。目前,我正在寻找一个替代功能的释放包内存功能,或你能推荐我另一个替代。我会感谢你的帮助

最佳答案

为什么要使用Git的malloc包装器?你明白它在干什么吗?如果是的话,为什么你认为你需要一个“替代品”来释放内存?
这个包装器所做的就是,如果malloc失败,它会尝试释放一些用于缓存的内存(这就是release_pack_memory所做的),然后再试一次。如果您没有任何内存缓存,那么复制这个包装器是没有意义的(如果您有内存缓存,那么您应该已经知道如何从中释放内存,而不必复制此函数)。
*它还包含一个检查,如果size在不支持malloc(0)的平台上是0,如果这是您关心的问题,那么release_pack_memory stuff仍然是无用的。

关于c - 如何在代码中使用Git的malloc包装器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3184172/

10-13 06:33