首页 > 编程知识 正文

内存池是什么,内存解释

时间:2023-05-06 15:49:14 阅读:163159 作者:1650

内存池详细信息目录内存池分配详细概念内存进程释放内存内存池的优缺点

概念

如图所示,内存池可以大幅减少因调用new malloc而发生的区域碎片,提高内存利用率

在STL中一共有两级空间分配器,内存池就是实现在二级空间分配器当中的

内存池总共维护16个链表,每个链表负责8byte到128byte的特定大小的空间块

当传递一个表示我们需要的内存大小的单字节参数时,分配内存的过程将自动校准到第几个链表中。 例如,13字节分配16字节,找到对应的第几个链表后

确定链表是否为空,如果不为空,则为直接从free_list中拔出来分配,同时指针后移,如果为空,则为22.1 如果链表为空内存池不为空时,以确定内存池中的剩余空间是否已满,20nore

2 .如果220个节点的大小不够,调查是否满足1个节点的大小。 如果不够的话,分配给用户,剩下的空间尽可能挂在free_list下如果剩余空间连一个node都无法满足上。 此时,l2空间适配器使用malloc向heap申请内存。 申请大小为2*20*node多余空间中一半保留在内存池,一半保留在内存池的内存释放大于128byte时直接调用一级空间分配器,否则直接挂在相应链表下

内存池的优缺点

解决了外部碎片问题,提高了空间利用率的缺点

因为是以8的倍数进行内存的管理,所以只用一个byte是徒劳的二次空间分配器是在堆中申请大块的狭义的内存池,在程序的执行中,申请的内存一张一张地挂在自由链表中,也就是操作系统此外,所有内存池实现都是静态的,也就是说,只有在程序完成后,才会真正释放内存并返回给操作系统。 这会引起以下问题。 如果我们不断开拓小内存,在不断开拓的过程中,最后整个堆的空间就会挂在自由链表上。 这样的话,之后就算想申请很大的空间也不行。 如果自由链表中的许多内存块没有被使用,当前进程就会占用内存,如果使用了大量的内存池,就会浪费大量的资源

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。