我是一个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;
}
问题
- 我不明白他们为什么要使用
malloc(1)
? release_pack_memory
是干什么的,我在整个源代码中都找不到这个函数的实现。#ifdef XMALLOC_POISON memset(ret, 0xA5, size);
是干什么的?
我计划在我的项目中重用这个函数。这是一个好的 malloc
封装吗?
任何帮助都将不胜感激。
git grep release_pack_memory
查找!) - Cascabelgit grep
的观点很好。 - Navaneeth K N