可以看到是根据第二个类型参数_Alloc调用它的static函数来完成内存分配的。其实主要就是用的 template class __default_alloc_template 和 template class __malloc_alloc_template 来分配内存的。 先看看__malloc_alloc_template代码,因为它要比较简单一些:
allocate/reallocate就是分配内存的函数了,它调用malloc/realloc进行分配,如果不成功就调用_S_oom_malloc/S_oom_realloc(oom应该就是out of memory的意思)函数重新进行分配,但是它有一个前提就是设置了初始给函数指针__malloc_alloc_oom_handler赋了值。默认的动作是__THROW_BAD_ALLOC。
#ifndef __THROW_BAD_ALLOC
# if defined(__STL_NO_BAD_ALLOC)||!defined(__STL_USE_EXCEPTIONS)
# include <stdio.h>
# include <stdlib.h>
# define __THROW_BAD_ALLOC fprintf(stderr,"out of memory\n");exit(1)
# else/* Standard conforming out-of-memory handling */