包装malloc - C.

Nav*_*K N 9 c malloc memory-management

我是C的初学者.在阅读git的源代码时,我发现了这个包装函数malloc.

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)

问题

  1. 我不明白他们为什么要用malloc(1)
  2. 做什么release_pack_memory和我在整个源代码中找不到这个函数实现.
  3. 这有什么#ifdef XMALLOC_POISON memset(ret, 0xA5, size);作用?

我打算在我的项目中重用这个功能.这是一个很好的包装malloc

任何帮助都会很棒.

Lar*_*ars 3

  1. malloc(0) 不适用于所有平台,在这种情况下,会进行一字节分配。允许分配 0 长度的内存块可以简化程序的高层逻辑。

  2. 不知道。

  3. 通过用非零值填充分配的内存,可以更容易地发现程序中在没有正确初始化的情况下使用内存的错误:在这种情况下,程序几乎会立即崩溃。由于填充内存需要时间,因此它被包装在预处理器定义中,因此仅在需要时才进行编译。