上一篇我們介紹了STL對(duì)象的構(gòu)造與析構(gòu),這篇介紹STL內(nèi)存的配置與釋放。
STL有兩級(jí)空間配置器,默認(rèn)是使用第二級(jí)。第二級(jí)空間配置器會(huì)在某些情況下去調(diào)用第一級(jí)空間配置器。空間配置器都是在allocate函數(shù)內(nèi)分配內(nèi)存,在deallocate函數(shù)內(nèi)釋放內(nèi)存。
第一級(jí)空間配置器
第一級(jí)配置器只是對(duì)malloc函數(shù)和free函數(shù)的簡(jiǎn)單封裝,在allocate內(nèi)調(diào)用malloc,在deallocate內(nèi)調(diào)用free。同時(shí)第一級(jí)配置器的oom_malloc函數(shù),用來(lái)處理malloc失敗的情況。如下所示:
allocate對(duì)malloc函數(shù)簡(jiǎn)單封裝 :
static void *allocate(size_t n) { void *result = malloc(n); if (NULL == result) result = oom_malloc(n); return result; }
deallocate對(duì)free函數(shù)簡(jiǎn)單封裝 :
static void deallocate(void *p, size_t) { free(p); }
oom_malloc調(diào)用外部提供的malloc失敗處理函數(shù),然后重新試著再次調(diào)用malloc。重復(fù)執(zhí)行此過(guò)程,直到malloc成功為止 :