感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接
🐒🐒🐒 个人主页
🥸🥸🥸 C语言
🐿️🐿️🐿️ C语言例题
🐣🐣🐣 python
🐓🐓🐓 数据结构C语言
🐔🐔🐔 C++
🐿️🐿️🐿️ 文章链接目录
🤠🤠🤠 高并发内存池项目
什么是内存池
池化技术
池化技术就是程序先向系统申请过量的资源,然后自己管理,以备不时之需。之所以要申请过量的资源,是因为每次申请该资源都有较大的开销,不如提前申请好了,这样使用时就会变得非常快捷,大大提高程序运行效率
举个例子,大学生的生活费基本上都是一个月一个月的给,因为这样给效率会更高一些,假如不是这样一次性给很多钱,那么就会出现大学生经常找父母要钱,比如今天我想吃顿饭,结果发现没钱了,于是找父母要钱,而他们给的钱也就刚好够这顿饭的钱,等到了下次要吃饭的时候发现又没钱了,于是又找他们要钱
这样的话就会发现非常麻烦,所以一般生活费都是一次性给一个月,池化技术也就是这个道理,我们一次性申请过量的资源,后面就会不用这么频繁的再次申请了
内存池
内存池是指程序预先从操作系统申请一块足够大内存,此后,当程序中需要申请内存的时候,不是直接向操作系统申请,而是直接从内存池中获取;同理,当程序释放内存的时候,并不真正将内存返回给操作系统,而是返回内存池。当程序退出(或者特定时间)时,内存池才将之前申请的内存真正释放。
内存池主要解决的问题
效率问题
这个问题比较好理解就是大学生要生活费
内存碎片问题
如图,在申请空间后,我们并不知道谁先释放内存,假如vector和list先释放内存,释放的内存总大小是384,但是当我们想要申请内存大小是256的时候,我们是申请不了的,因为他们的空间是不连续的,也就是碎片化,所以看起来可以申请的内存是384,实际上最大可以申请的内存是256
malloc
C/C++中我们要动态申请内存都是通过malloc去申请内存,但是我们要知道,实际我们不是直接去堆获取内存的(因为会有效率问题和内存碎片问题)
而malloc就是一个内存池。malloc相当于向操作系统“批发”了一块较大的内存空间,然后“零售”给程序用。当全部“售完”或程序有大量的内存需求时,再根据实际需求向操作系统“进货”。
malloc的实现方式有很多种
下面是一些大佬的文章
一文了解,Linux内存管理,malloc、free 实现原理