跨平台高效HTTP队列实现方案之内存池基础组件.

本文介绍了一种基于pjlib库的内存池技术方案,通过固定大小的内存块并按需增量扩展,采用链表方式进行管理。此外,文章还讨论了如何在多种基础组件中应用内存池技术,包括数组容器、线程、锁、定时器等,并实现了一个低内存消耗的HTTP方案,同时提供了文件缓存方案,有效减少了内存开销。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内存池技术大致方案都是提前开辟一定空间的内存,以供程序使用,避免内存碎片对系统分配后续内存的影响,不但能够提高操作系统的效率,减少实际内存开销,同时也提高了程序本身的效率,因为使用malloc从系统获取内存和从内存块获取某个空间的指针的时间周期是不一样的。

这里要介绍的内存池组件是基于pjlib库中的组件,内存池组件的方案在网上找找也有好几种,pjlib库中的个人觉得还是比较不错的,基于可增量的固定块大小,以链表管理的可扩展队列方案。可增量的固定块大小,指的是内存块大小开辟时是固定的,但是可根据不同需求进行增量扩展,比如:64K/128k/256k/512k/1024k,根据需求来决定使用哪个大小的块,如果使用过程块中空闲内存不足,可以新建内存块,以链表形式管理。

经过整合后,我将基础组件都增加了对内存池的支持,包括封装的数组容器(string/vector/hash)、线程、锁、timer等,在此基础之上,使用之前所介绍的线程池技术,同时增加对sock连接的复用管理,实现了一个对内存要求较低、可复用连接的HTTP实现方案(不过仅实现http的get/post能力),同时提供了一种文件缓存方案,使用该方案时,除了请求数据会占用内存空间,接收的数据都以文件形式存储在磁盘当中。经过一定量的测试,只需要4k内存开销,即可实现1次HTTP请求,并且如果对于不需要同时进行HTTP请求的场景,4K内存将不会增长,因为这4k内存将复用,同时sock连接将被保持,效率有明显提升.

此内存池方案同时增加对内存分配和释放的跟踪,以检测内存泄露问题.

后续资料逐步更新,包括源码,将同时奉上.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值