• 极高效内存池实现 (cpu-cache)


    视频请看 : http://edu.csdn.net/course/detail/627

    1.内存池的目的

      提高程序的效率
      减少运行时间
      避免内存碎片
    2.原理
       要解决上述两个问题,最好的方法就是内存池技术。具体方法就是,申请内存 :大小固定,提前申请,重复利用。
    3.使用场合
      长时间运行的服务程序
      对速度要求高的程序
      对稳定性要求高的程序
    4.内存池不能满足所有的需求
      内存池是不能够满足所有人的需求的,那么考虑到通用性,健壮性,需要考虑到,当申请内存块 大小不在内存池 中的情况
    或者内存池中已经没有内存块了,所采取的措施:直接使用系统的申请,释放函数。
    内存池的设计 :
      内存池中有很多内存块,内存池中有很多链表,每一个链表中存储一种固定大小的内存块,例如128字节链表中存储的是大小都为
    128字节的内存块,依次类推,内存池中维护了很多个这样的链表。
      这里我们要解决的第一个问题是,当我们申请内存是,首先要找到对应大小的链表,如果设计可以避免这个查找过程。
          从内存链表中申请内存过程中,不需要查找,直接返回可用内存(链表可轻松实现)
         解释释放内存的时候,如何快速的把内存块放回到对应的链表中
         
    下面针对上述问题做依次设计:
                       
     
    首先在数据结构上进行申请的研究:
    为了能满足上面的申请,释放可以快读定位到链表,我们需要维护额外的数据结构才可以达到目标,思路如下:
    在申请内存的时候需要多申请一部分作为系统使用,系统使用的内存结构中,包含了该内存块所属的内存链表指针,这样就可以
    快速度的释放内存。
     
    有了这个特殊的结构设计以后,我们就可以不通过查找定位到内存上。
    看下面的图:
    首先考虑我们申请内存的过程:
     
    char* p = new char[100];
    实际上我们给出的输入数据就是 100个字节的数据,如果我可以 MemeoryList* p = _listIndex[100];
    这样就可以直接的定位到对应的链表了。
     
    如何结合 CPU-cache实现更加高度的内存池呢 ?
  • 相关阅读:
    php中向mysql插入数据
    W3Cschool菜鸟教程离线版下载链接
    Call to undefined function mysqli_connect()
    Windows下MySQL 5.6安装及配置详细图解
    请不要再责怪你的程序员“太慢”
    工欲善其事必先利其器
    PHP正则表达式
    matlab画柱状图
    matlab 把数组中的NaN去除掉
    建模2017A题 角度lingo代码
  • 原文地址:https://www.cnblogs.com/zhanglitong/p/4430927.html
Copyright © 2020-2023  润新知