SGI_STL空间配置器源码剖析(六)deallocate函数

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
    }
  }

示意图如下,对小块内存找到其对应的数组中的头指针之后,通过头插法插入链表中:

相关推荐

最近更新

  1. 计算机网络-HTTP常见面试题

    2024-04-13 09:28:02       0 阅读
  2. c++实战-多子棋

    2024-04-13 09:28:02       0 阅读
  3. 访问者模式在金融业务中的应用及其框架实现

    2024-04-13 09:28:02       0 阅读
  4. PyTorch清理CPU缓存

    2024-04-13 09:28:02       1 阅读
  5. qt 自定义信号和槽举例

    2024-04-13 09:28:02       1 阅读
  6. 贪吃蛇代码python实现

    2024-04-13 09:28:02       1 阅读
  7. iOS开发语言基础与Xcode工具初探

    2024-04-13 09:28:02       1 阅读

热门阅读

  1. MySQL存储过程

    2024-04-13 09:28:02       13 阅读
  2. React Hooks全面解读与高效开发实践

    2024-04-13 09:28:02       15 阅读
  3. Spring Boot 经典面试题(五)

    2024-04-13 09:28:02       16 阅读
  4. 程序员日常工作的内容

    2024-04-13 09:28:02       16 阅读
  5. AI重构你的方方面面

    2024-04-13 09:28:02       16 阅读
  6. 后台权限控制及动态路由

    2024-04-13 09:28:02       18 阅读
  7. 利用机器学习库做动态定价策略的例子

    2024-04-13 09:28:02       13 阅读
  8. Rust与Go的对比

    2024-04-13 09:28:02       16 阅读
  9. arcgis js 动态绘制白膜

    2024-04-13 09:28:02       37 阅读
  10. halcon混合c#深度学习平整度怎么写

    2024-04-13 09:28:02       21 阅读
  11. Linux命令学习—linux 的硬件管理

    2024-04-13 09:28:02       17 阅读