我想在我的代碼中使用git的malloc和realloc包裝來處理OOM(內存不足)的情況。下面是它的代碼:如何在代碼中使用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;
}
但release_pack_memory功能是sha1_file.c頭文件,這個功能在Git的代碼在其他頭文件中的函數的引用,我不想把這麼多精力用於隔離該函數來自Git的代碼庫。目前我正在尋找release_pack_memory函數的替代函數,或者可以向我推薦另一種替代函數。我會很感激任何幫助
是的,我認爲我明白這個代碼。但是我錯過了它從自己的緩存中解放出來的觀點:)。我確實有內存緩存。 – systemsfault 2010-07-06 07:19:15
@systemsfault:當然,邏輯基本上只是「如果malloc'失敗,從緩存中至少釋放大小字節並再次嘗試」。 – 2010-07-06 07:23:03
不,大小爲0的檢查不適用於不支持malloc(0)的平臺。這對於那些希望在malloc(0)上返回一個非NULL指針的愚蠢的GNU行爲的調用者來說。大多數理智的人都同意最好使malloc(0)返回NULL。 – 2010-07-06 07:48:50