我是C的初學者。在閱讀git的源代碼時,我發現這個包裝函數在malloc
左右。包裝malloc - C
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
?
任何幫助將是偉大的。
榮譽設定好的內存包裝的讀取現有的複雜程序的代碼 - 我希望更多的開發商這樣做。 – Lars 2010-03-19 18:38:38
對於問題2:它的定義是在sha1_file.c中(大概是用於內存來處理git的包對象),它的原型在git-compat-util.h中。 (提示:只要你在git的源代碼中查看,使用'git grep release_pack_memory'找到它!) – Cascabel 2010-03-19 18:40:21
@Lars:謝謝。 @Jefromi:關於'git grep'的好處。 – 2010-03-19 18:54:32