c-xmalloc毒药的用途是什么



我正在读取git的源代码。我加入了这个xmalloc实现。

static void *do_xmalloc(size_t size, int gentle)
{
    void *ret;
    if (memory_limit_check(size, gentle))
        return NULL;
    ret = malloc(size);
    if (!ret && !size)
        ret = malloc(1);
    if (!ret) {
        try_to_free_routine(size);
        ret = malloc(size);
        if (!ret && !size)
            ret = malloc(1);
        if (!ret) {
            if (!gentle)
                die("Out of memory, malloc failed (tried to allocate %lu bytes)",
                    (unsigned long)size);
            else {
                error("Out of memory, malloc failed (tried to allocate %lu bytes)",
                      (unsigned long)size);
                return NULL;
            }
        }
    }
#ifdef XMALLOC_POISON
    memset(ret, 0xA5, size);
#endif
    return ret;
}

我想知道这个部分的目的是什么:

#ifdef XMALLOC_POISON
    memset(ret, 0xA5, size);
#endif

这是一种轻松查看是否使用未初始化内存的方法。如果您使用内存,并且所有(或大部分)内容都是0xA5,那么您就知道内存尚未初始化,并且您有未定义的行为。

如果定义了宏XMALLOC_POISON,函数不仅会分配内存,还会将内存中的值初始化为任意垃圾值。在调试由未初始化变量引起的问题时,这可能是一种有用的技术。

相关内容

  • 没有找到相关文章