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
    }
  } 
示意图如下,对小块内存找到其对应的数组中的头指针之后,通过头插法插入链表中:




















