zoukankan      html  css  js  c++  java
  • 【内存管理】内存池技术

    内存池是种用于分配大量大小相同的小块内存的技术,可以极大加快内存分配/释放过程.

    MemPool技术的内存分配,释放速度非常快,达到O(1)级别.

    缺点:

    1).只能分配特定字节长度的内存,也就是说,MemPool不是通用内存管理器.

    2).MemPool技术可能导致内存占用只增不减.

    基本实现如下:

    其中指针变量MemBlockHeader把所有申请的内存块(MemBlock)串成一个链表,以便通过它可以释放所有申请的内存.

    FreeNodeHeader变量则是把所有自由内存结点(FreeNode)串成一个链表.

    内存块大小一般固定为MemBlockSize字节(除去用以建立链表的指针外).

    内存块在申请之初就被划分为多个内存结点,每个Node大小为ItemSize(小对象的大小),计MemBlockSize/ItemSize个.

    MemBlock和FreeNode的示意图如下:

     

    申请过程如下:

    内存申请过程分为两种情况:

    1).在自由内存结点链表(FreeNodeList)非空,分配过程只是从自由内存结点链表中摘下一个结点的过程.

    2).否则,意味着需要一个新的内存块(MemBlock).需要重新申请,并将申请的MemBlock切割成多个Node.

    释放过程如下:

    释放过程只是把要释放的结点挂到自由内存链表(FreeNodeList)的开头即可.

    STL的空间配置器,使用内存池的技术,解决小于128bytes块的分配.

    其参用的是多级块大小的自由链表,自由结点参用union结构设计,减少额外的开销.

    具体介绍,请参考 http://www.cnblogs.com/dwdxdy/archive/2012/06/05/2537208.html

    参考资料:http://cplusplus.wikidot.com/cn:dive-into-memory-pool

     

  • 相关阅读:
    bash 笔记
    lvs: linux virtual server
    学习html第一天
    学习c语言的第14天
    c语言学习的第13天2
    c语言学习的第13天1
    c语言学习的第12天
    c语言学习的第11天 指针
    移动端点击延迟300毫秒----FastClick用法
    H5移动端复制功能实现
  • 原文地址:https://www.cnblogs.com/dwdxdy/p/2537431.html
Copyright © 2011-2022 走看看