Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Git';我的代码中有malloc包装器吗?_C_Git_Malloc - Fatal编程技术网

如何使用Git';我的代码中有malloc包装器吗?

如何使用Git';我的代码中有malloc包装器吗?,c,git,malloc,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);

我想在代码中使用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函数在头文件中,这个函数引用了Git代码中其他头文件中的函数,我不想花费太多精力将这个函数与Git的代码库隔离开来。目前,我正在寻找一个替代功能的释放包记忆功能,或者你可以推荐我另一个替代。我将非常感谢任何帮助

为什么您想使用Git的malloc包装器?你明白它在做什么吗?如果是这样,为什么您认为需要“替换”release\u pack\u内存

如果
malloc
失败,这个包装器只会尝试释放一些用于缓存的内存(这就是
release\u pack\u memory
所做的),然后重试。如果您没有任何内存缓存,那么复制这个包装器就没有意义了(如果您有内存缓存,那么您应该已经知道如何从中释放内存而不必复制这个函数)



*它还包含一个检查,在不支持
malloc(0)
的平台上,如果
size
为0,如果这是您关心的问题,那么release\u pack\u内存仍然是无用的。

为什么要使用Git的malloc包装器?你明白它在做什么吗?如果是这样,为什么您认为需要“替换”release\u pack\u内存

如果
malloc
失败,这个包装器只会尝试释放一些用于缓存的内存(这就是
release\u pack\u memory
所做的),然后重试。如果您没有任何内存缓存,那么复制这个包装器就没有意义了(如果您有内存缓存,那么您应该已经知道如何从中释放内存而不必复制这个函数)



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

是的,我想我理解这段代码。但我没有注意到它正在从自己的缓存中释放:)。我确实有内存缓存。@systemsfault:当然,逻辑基本上只是“如果
malloc
失败,请从缓存中释放至少
size
字节,然后重试”。不,size 0检查不适用于不支持malloc(0)的平台。它适用于那些期望在malloc(0)上返回非空指针的愚蠢GNU行为的调用方。大多数理智的人都认为malloc(0)最好返回NULL。是的,我认为我理解这段代码。但我没有注意到它正在从自己的缓存中释放:)。我确实有内存缓存。@systemsfault:当然,逻辑基本上只是“如果
malloc
失败,请从缓存中释放至少
size
字节,然后重试”。不,size 0检查不适用于不支持malloc(0)的平台。它适用于那些期望在malloc(0)上返回非空指针的愚蠢GNU行为的调用方。大多数理智的人都认为malloc(0)最好返回NULL。