视频请看 : 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实现更加高度的内存池呢 ?

极高效内存池实现 (cpu-cache)的更多相关文章

  1. 高效内存池的设计方案[c语言]

    一.前言概述 本人在转发的博文<内存池的设计和实现>中,详细阐述了系统默认内存分配函数malloc/free的缺点,以及进行内存池设计的原因,在此不再赘述.通过对Nginx内存池以及< ...

  2. 关于CPU Cache -- 程序员需要知道的那些事

    本文将介绍一些作为程序猿或者IT从业者应该知道的CPU Cache相关的知识.本章从"为什么会有CPU Cache","CPU Cache的大致设计架构",&q ...

  3. 关于CPU Cache:程序猿需要知道的那些

    天下没有免费的午餐,本文转载于:http://cenalulu.github.io/linux/all-about-cpu-cache/ 先来看一张本文所有概念的一个思维导图: 为什么要有CPU Ca ...

  4. 关于CPU Cache -- 程序猿需要知道的那些事

    本文将介绍一些作为程序猿或者IT从业者应该知道的CPU Cache相关的知识 文章欢迎转载,但转载时请保留本段文字,并置于文章的顶部 作者:卢钧轶(cenalulu) 本文原文地址:http://ce ...

  5. [转帖]关于CPU Cache -- 程序猿需要知道的那些事

    关于CPU Cache -- 程序猿需要知道的那些事 很早之前读过作者的blog 记得作者在facebook 工作.. 还写过mysql相关的内容 大拿 本文将介绍一些作为程序猿或者IT从业者应该知道 ...

  6. Android内存管理(4)*官方教程 含「高效内存的16条策略」 Managing Your App's Memory

    Managing Your App's Memory In this document How Android Manages Memory Sharing Memory Allocating and ...

  7. 从Java视角理解CPU缓存(CPU Cache)

    从Java视角理解系统结构连载, 关注我的微博(链接)了解最新动态众所周知, CPU是计算机的大脑, 它负责执行程序的指令; 内存负责存数据, 包括程序自身数据. 同样大家都知道, 内存比CPU慢很多 ...

  8. [转帖]CPU Cache 机制以及 Cache miss

    CPU Cache 机制以及 Cache miss https://www.cnblogs.com/jokerjason/p/10711022.html CPU体系结构之cache小结 1.What ...

  9. CPU Cache 机制以及 Cache miss

    CPU体系结构之cache小结 1.What is cache? Cache是用来对内存数据的缓存. CPU要访问的数据在Cache中有缓存,称为“命中” (Hit),反之则称为“缺失” (Miss) ...

随机推荐

  1. POJ3104 Drying 2017-05-09 23:33 41人阅读 评论(0) 收藏

    Drying Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 15604   Accepted: 3976 Descripti ...

  2. ZOJ2481 Unique Ascending Array 2017-04-18 23:08 33人阅读 评论(0) 收藏

    Unique Ascending Array Time Limit: 2 Seconds      Memory Limit: 65536 KB Given an array of integers ...

  3. codevs 1012

    题目描述 Description 给出n和n个整数,希望你从小到大给他们排序 输入描述 Input Description 第一行一个正整数n 第二行n个用空格隔开的整数 输出描述 Output De ...

  4. Delphi XE4 For IOS中程序的调试(虚拟机,真实机和win32)

    安装完之后,大家可以看一下XE4可以新建的工程类型: File->New: 是不是多出了FireMonkey Mobile Application这一个选项呀! 然后你再点击这个菜单项,弹出Fi ...

  5. C# Socket 实现WebSocket服务器端

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.N ...

  6. XML字符串反序列化为实体

    JSON反序列化实体 paydata = StringHelper.Base64ToString(paydata); resInfo = JsonConvert.DeserializeObject&l ...

  7. vux Tabbar组件入门备忘大佬多指点

    一.Tabbar引入及使用 1.新创建vue文件 2.在vue文件中添加插件 <template> <div> <tabbar style="position: ...

  8. VisualStudio神级插件Resharper的基本配置和使用技巧大全+Resharper性能优化

    所谓工欲善其事,必先利其器.尽管visual studio本身已经非常强大,但优秀的插件仍然可以帮开发者大大提高效率. ReSharper是一款由jetbrain开发的针对C#,VB.NET,ASP. ...

  9. SSE sqrt还是比C math库的sqrtf快了不少

    #include <stdio.h> #include <xmmintrin.h> #define NOMINMAX #include <windows.h> #i ...

  10. iOS推送功能极光推送的介绍与实现

    1.个人整理操作流程 2.官方使用说明流程 2018iOS极光推送完整流程 极光推送官网