成都建设网站公司哪家好,微信公众号登录入口官方,校园网站建设促进教学,大连网站设计哪里有做一、为什么需要内存池#xff1f;
按照标准库的写法#xff0c;new一个对象的时候#xff0c;会malloc一块内存#xff1b;delete的时候会free这块内存。频繁的malloc与free存在两个问题#xff1a; #xff08;1#xff09;耗时#xff0c;这两个都是操作系统层级的函…一、为什么需要内存池
按照标准库的写法new一个对象的时候会malloc一块内存delete的时候会free这块内存。频繁的malloc与free存在两个问题 1耗时这两个都是操作系统层级的函数会相对耗时。 2malloc的内存中存在上下两个cookie用来标记这块内存的起止地址而且内存要向上取8的倍数。如果大量malloc那么内存内存浪费还是比较惊人的。 这个问题内存池可以很好地解决。
二、什么是内存池
既然频繁的malloc不是一件好事情那么我们可以一次malloc申请一大块内存。当需要new一个对象的时候可以在已经申请好的内存里面执行构造函数。在我们delete这个对象之后这个内存上还可以用来构造其它对象。 这就是内存池设计的基本思想一次性申请大块内存用于多次new对象避免频繁的malloc与delete。
三、链表实现内存池的基本思想
你如果在中文搜索引擎上面搜索“内存池的实现”出现最多的方法就是链表实现内存池。有一说一这个名字取得不好非常容易让人产生误解。比如 用链表实现内存池链表本来就是不连续的内存那就说明要malloc多次那么这个内存池有什么意义 答案内存池就是一次扩容情况下多次malloc的内存是连续的内存。只不过将连续的内存使用链表管理起来了。