池化组件之内存池

内存池是一种有效的内存管理策略,旨在解决频繁分配和释放小块内存导致的效率低下和内存碎片问题。本文详细介绍了内存池的原理,包括进程与虚拟内存的关系、内存碎片的产生以及内存池的实现策略,如伙伴算法和slab算法。同时,讨论了内存泄露的检测方法,并提供了设计特定场景内存池的思路和关键数据结构。最后,探讨了线程安全的内存池实现。
摘要由CSDN通过智能技术生成

1 解决问题

对于服务器而言,当epoll_wait检查io事件是否就绪后,然后recv接收数据写入buffer,对于buffer如果采用在栈上处理;会出现如果耗时,一次性没有处理完或者想将buffer传给单独的线程或线程池处理。就无法实现,就需要在堆上处理。
若无内存池,每次开辟都需要malloc系统调用;内存池就是程序中的只要是在堆上的空间全部统一管理。
在这里插入图片描述
应用场景:主要用于数据频繁的需要分配的地方

2 内存池原理

1 进程与虚拟内存的关系
每个进程都有一个对应的虚拟内存,和真实的物理内存一样大都是4G.
在这里插入图片描述
2 内存碎片产生原因
在堆上分配空间比如按照顺序分配512,64,512;此时释放64字节,此时64就是内存碎片了,当在分配大于64字节的空间的时候,之前释放的就无法使用。空间的分配时间和顺序不固定会产生内存碎片。
3 内存池定义
专门针对小块频繁分配释放空间进行管理。将小块合并成大块管理。如一次分配4

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丰恒谷

你的鼓励是我最大创作动力!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值