1
設計的代碼如下:內部函數_S_oom_malloc在SGI-STL分配器
template <int __inst>
void*
__malloc_alloc_template<__inst>::_S_oom_malloc(size_t __n)
{
void (* __my_malloc_handler)();
void* __result;
for (;;) {
__my_malloc_handler = __malloc_alloc_oom_handler;
if (0 == __my_malloc_handler) { __THROW_BAD_ALLOC; }
(*__my_malloc_handler)();
__result = malloc(__n);
if (__result) return(__result);
}
}
我有兩個問題。 1.爲什麼_S_oom_malloc使用無限循環? 2.如我們所知,當malloc在__malloc_alloc_template :: allocate函數中失敗時,_S_oom_malloc將被調用。爲什麼它使用malloc分配空間?
任何人都可以幫到我嗎?非常感謝。
非常感謝,__my_malloc_handler的功能是什麼? – lancerex
它只是一個指向當前新處理程序(可以通過__malloc_alloc_oom_handler重置)的本地函數指針。 – TemplateRex
我明白了。非常感謝你!! – lancerex