deallocate函数是内存释放函数。源码及注释如下:
/* __p may not be 0 */static void deallocate(void* __p, size_t __n) // __p指向要回收的内存起始地址,__n表示其大小{if (__n > (size_t) _MAX_BYTES)// 大于128字节,普通方式开辟和回收内存malloc_alloc::deallocate(__p, __n);else {_Obj* __STL_VOLATILE* __my_free_list= _S_free_list + _S_freelist_index(__n); // 找到数组中对应的头结点_Obj* __q = (_Obj*)__p;// acquire lock
# ifndef _NOTHREADS/*REFERENCED*/_Lock __lock_instance;
# endif /* _NOTHREADS */__q -> _M_free_list_link = *__my_free_list; // 要归还的节点的指针,指向原链表首节点*__my_free_list = __q; // 数组中的头指针指向要归还的节点,完成向链表前部添加回收节点// lock is released here}}
示意图如下,对小块内存找到其对应的数组中的头指针之后,通过头插法插入链表中: