大家好,这是我第一篇在CSDN上的博文,本篇主要讨论小型内存池的设计

大家好,这是我第一篇在CSDN上的博文,本人主要研究嵌入式软件相关。
我先自我介绍一下,本人13年华南师大毕业,现在主要做嵌入式软件开发,开发平台包括windows和linux,接触使用的软件也很多,如Codewarrior、keil、STVD、IAR、VC等,本人写博客主要也是为了和大家交流嵌入式技术,如有错误或者有其他意见也可以向我提出。
最近一个多月都在windows平台上开发一个实时数据库,使用C++语言,此实时数据库的目的在于保存工控应用环境中成千上万的数据量,实时数据库的设计要求要有良好的文件组织,高效的压缩算法,方便的接口以及快速的读写操作,要求对多个模块操作的时间复杂度为常数级别。
在对数据查询、数据写入队列和其他操作命令队列中,需要经常分配和回收内存,使用系统自带的new来分配内存,如果只是小量内存的快速分配和回收,那效率也还可以,但是很多情况下并非满足这样的条件,例如,在对数据查询的时候,如果一个点位保存了成年累月的数据,那么查询出来的数据量无疑是非常庞大而且耗时较长,如果用new来分配内存,到了上万条数据时(在本人机器上大概是1.5万条数据),new的效率明显的下降,分配1.5万条数据内存需要消耗4秒的时间,如果是多线程环境下更长。光是分配内存就要消耗大部分时间,当然这只是单纯的分配,如果还有构造链表之如的操作,那查询的数据的操作在内存上消耗的时间也占用了大部分,还不算上读写文件的操作(之后会有一篇文章讨论文件的读写)。因此需要构造一个内存池来管理这些内存的回收和释放。
本人参考了 上一些高人写的内存池代码,各有春秋,分析整理后,本人的内存池设计如下:
先来个图显示设计结构

这里写图片描述

最主要的还是操作各指针的指向,一用到指针操作则非常容易出错,本人也是调试了3天左右,才把这个内存池调稳定,测试情况如下,
本人机器为Inter i3处理器,4G的内存,使用new对10万条数据连续分配和回收的情况下(包含链表的压入和弹出的操作),使用时间大概为4秒左右,使用内存池进行分配和回收,所用时间不到300ms,效率有极大的提升。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2016年5月25日
下一篇 2016年5月25日

相关推荐