allocate
内存分配函数关键代码如下
static void* allocate(size_t __n)
{
void* __ret = 0;
// 超过 _MAX_BYTES ,使用一级空间配置器
if (__n > (size_t) _MAX_BYTES) {
__ret = malloc_alloc::allocate(__n);
}
else { // 使用二级空间配置器,即内存池
_Obj* __STL_VOLATILE* __my_free_list
= _S_free_list + _S_freelist_index(__n);
_Lock __lock_instance; // 对链表操作加锁保证线程安全,类似于lock_guard
_Obj* __RESTRICT __result = *__my_free_list;
if (__result == 0) // 这个内存块链表为空,则创建该chunk块
__ret = _S_refill(_S_round_up(__n)); // 后续说明
else {
*__my_free_list = __result -> _M_free_list_link;
__ret = __result;
}
}
return __ret;
}
使用二级空间配置器并进入else
的逻辑(chunk块有内存小块可分配),图示如下