의 내부 기능 _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. 우리가 알다시피, _S_oom_malloc은 malloc이 __malloc_alloc_template :: allocate 함수에서 실패 할 때 호출됩니다. 왜 공간을 할당하기 위해 malloc을 사용합니까?
누구든지 나를 도와 줄 수 있습니까? 고마워.
감사합니다. __my_malloc_handler의 기능은 무엇입니까? – lancerex
그것은 현재 new-handler ('__malloc_alloc_oom_handler'에 의해 재설정 될 수있는)를 가리키는 로컬 함수 포인터 일뿐입니다. – TemplateRex
알겠습니다. 대단히 감사합니다 !! – lancerex