【发布时间】:2010-03-19 18:29:27
【问题描述】:
我是 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 的一个很好的包装吗?
任何帮助都会很棒。
【问题讨论】:
-
感谢阅读现有复杂程序的代码 - 我希望更多的开发人员这样做。
-
对于问题 2:它的定义在 sha1_file.c 中(大概是与 git 的包对象有关的内存),它的原型在 git-compat-util.h 中。 (提示:只要你在看 git 的源代码,使用
git grep release_pack_memory就可以找到它!) -
@Lars:谢谢。 @Jefromi:关于
git grep的好点。 -
“我是 C 的初学者。在阅读 git 的源代码时...” - 在最深处,太棒了。
标签: c memory-management malloc