一、为什么需要内存池?
按照标准库的写法,new一个对象的时候,会malloc一块内存;delete的时候会free这块内存。频繁的malloc与free存在两个问题:
(1)耗时,这两个都是操作系统层级的函数,会相对耗时。
(2)malloc的内存中存在上下两个cookie,用来标记这块内存的起止地址,而且内存要向上取8的倍数。如果大量malloc,那么内存内存浪费还是比较惊人的。
这个问题,内存池可以很好地解决。
二服务器托管网、什么是内存池?
既然频繁的malloc不是一件好事情,那么我们可以一次malloc申请一大块内存。当需要new一个对象的时候,可以在已经申请好的内存里面执行构造函数。在我们delete这个对象之后,这个内存服务器托管网上还可以用来构造其它对象。
这就是内存池设计的基本思想:一次性申请大块内存,用于多次new对象,避免频繁的malloc与delete。
三、链表实现内存池的基本思想
你如果在中文搜索引擎上面搜索“内存池的实现”,出现最多的方法就是链表实现内存池。有一说一,这个名字取得不好,非常容易让人产生误解。比如:
用链表实现内存池,链表本来就是不连续的内存,那就说明要malloc多次,那么这个内存池有什么意义???
答案:内存池就是一次(扩容情况下多次)malloc的内存,是连续的内存。只不过将连续的内存使用链表管理起来了。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: 三、C#—变量,表达式,运算符(3)
一、变量
二、C#数据类型目录 一、变量 1.1 变量 1.2 使用变量的步骤 1.3 变量的声明 1.4 变量的命名规则 1.5 变量的初始化 1.6 变量初始化的三种方法 1.7 变量的作用域 1.8 变量使用实例 1.9 变量常见错误 二、C#数据类型 2.1 数据类型 2.2 …