我正在阅读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
答案 0 :(得分:1)
这是一种轻松查看您是否使用未初始化内存的方法。如果您使用内存并且所有内容(或大部分内容)都是0xA5
,那么您就知道内存未被初始化并且您有未定义的行为。
答案 1 :(得分:1)
如果定义了宏XMALLOC_POISON
,该函数不仅会分配内存,还会将内存中的值初始化为(看起来是什么)任意垃圾值。这可能是调试由未初始化变量引起的问题的有用技术。