Skip to content

hc-ljx/MemoryPool

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MemoryPool

一个内存池静态库 project3:多线程内存池3.0,新增内存池拓展,相较于前两个版本,该内存池更贴近实际应用; 前面版本,当全局链表耗尽时,线程只能进行内存的释放(归还到全局链表),这在实际应用中是不合理的; 当前版本,当全局链表耗尽时,线程会向系统申请的新的内存池加入全局链表。

多线程内存池3.0的测试: 基本功能测试:1、内存池的分配:分配后可以输出分配的内存地址,说明分配成功。 2、内存池的拓展:初始内存池为100块,进行150次分配,并将序号作为数据写入,结果得到149(从0开始), 说明内存池拓展成功,并且是合法可利用的地址。

比较单线程下和系统分配的效率:分别进行10万次分配和释放操作(分配后马上释放),进行1000次该操作,效率提高95%; 使用内存池结果:平均时间为3.71ms,最高时间5ms,最低时间3ms; 调用系统分配结果:平均时间为7.23ms,最高时间为9ms,最低时间为5ms;

测试内存泄漏检测:故意不调用释放函数,内存池析构时,成功给出泄露的内存块数;

测试内存池拓展:初始块为10块时,进行1000次内存分配,查询全局块为1000块,说明内存池可以大量正确拓展;

测试本地链表:当线程调用一次申请内存后全局块数减少10块(加入了本地链表),线程进行释放,全局块数不变(先归还到本地链表), 当线程再继续申请内存后全局块数不变(优先使用本地链表); 进行30次内存申请后,线程归还内存块,触发阙值20(当本地链表块多于20时批量归还),发现全局链表只缺少20块;

多线程测试:初始内存块每块为16字节,1000块,16个线程,每个线程进行10万次分配(分配后进行数据的写入)和释放,进行1000次该操作; 测试结果:平均时间436ms,最高时间487ms,最低379ms; 初始内存块每块为16字节,1000块,8个线程,每个线程进行10万次分配(分配后进行数据的写入)和释放,进行1000次该操作; 测试结果:平均时间143ms,最高时间160ms,最低140ms; 初始内存块每块为16字节,1000块,4个线程,每个线程进行10万次分配(分配后进行数据的写入)和释放,进行1000次该操作; 测试结果:平均时间57ms,最高时间64ms,最低54ms;

About

一个内存池静态库

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors