c - 包装 malloc - C

标签 c memory-management malloc

我是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;
}

问题

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

我打算在我的项目中重用这个函数。这是对 malloc 的良好包装吗?

任何帮助都会很棒。

最佳答案

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

  2. 不知道。

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

关于c - 包装 malloc - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2479700/

相关文章:

c - 在 C 中使用 Free() 时的运行时错误

C 子串匹配

c - 从秒获取 UTC 时间

c - 使用 free 和 realloc

c - 这个静态分配的结构数据如何在函数外部可用?

eclipse - eclipse中保留堆的单位?

c - 当指针指向使用 malloc() 获得的内存位置时,编译器如何处理 CONST 限定符?

c - 如何确定我的操作系统是否是共享内存多处理器平台

c - 在 C 中读取和打印 *char 字符串时的一个特殊错误

C++ -- 智能指针和自定义内存分配困境