内存池测试报告

1. 项目背景

自定义内存池是为了解决 C++ 程序中频繁调用malloc/free带来的性能开销、内存碎片问题而开发的底层内存管理组件。

  • 解决的核心问题:
    • 频繁堆内存分配导致的系统调用开销大、程序运行效率低
    • 零散内存分配产生的内存碎片,降低内存利用率

2. 项目介绍

该项目是基于定长内存池设计,在多核多线程下实现了一套较高效率的高并发内存池。通过借鉴 tcmalloc 的核心思想,设计了三级缓存架构(线程缓存→中心缓存→页缓存),在保证线程安全的前提下,大幅提升了内存分配与回收的吞吐率,同时有效控制了内存碎片化
架构设计:

  • 核心架构: 由线程缓存、中心缓存、页缓存三级缓存组成,既保证高并发下的效率,又能保证内存利用率
  • 内存碎片处理: 内碎片靠 “分级对齐“,外碎片靠“页缓存合并“处理,同时缓存复用从源头减少碎片产生
  • 高并发模式: 高频小对象走“线程缓存” 无锁操作,偶尔缺内存,批量向“中心缓存”申请(桶锁);中心缓存缺内存向 页缓存整页申请。大对象直接走 页缓存/系统(跳过中间层,减少竞争)

3. 测试计划

3.1 测试目标

  • 验证内存池基础功能正确性:申请、释放等核心功能正常,无崩溃、无内存泄漏
  • 验证内存池线程安全性:多线程并发申请/释放时,无崩溃、无死锁、无数据竞争
  • 验证内存池性能表现:对比系统 malloc/free ,多线程性能优于系统malloc

3.2 测试范围

  • 功能测试:单次申请/释放、批量申请/释放、内存池耗尽-释放-恢复、随机大小申请/释放、异常场景测试
  • 安全测试:循环分配/释放和多线程并发分配/释放,是否存在内存泄漏,线程安全问题
  • 性能测试:对比系统 malloc/free ,测试内存池的分配/释放耗时

4. 测试工具

在这里插入图片描述

5. 设计到的测试动作/类型

在这里插入图片描述

测试用例覆盖说明:

  • 功能测试:覆盖正常大小内存申请/释放、内存池循环复用、数据读写验证、随机大小分配、边界测试、异常场景(空指针/重复释放)等核心功能,共20+个用例
  • 安全测试:覆盖内存泄漏检测、多线程并发申请/释放、线程安全等场景
  • 性能测试:覆盖对比测试(内存池 vs malloc)、耗时统计、高并发性能等场景

6. 项目测试Bug

Bug编号严重程度修复状态Bug描述复现步骤预期结果实际结果
1崩溃已修复申请256KB内存时,程序崩溃调用MALLOC(256*1024)申请256KB内存成功分配程序崩溃
2一般未修复对同一块内存执行2次free操作,内存池未拦截该非法操作,程序无崩溃但存在内存结构损坏风险调用MALLOC(128)申请128B内存;内存池拦截重复释放,程序不崩溃重复释放无任何拦截,程序正常运行
调用FREE(PTR)正常释放;
再次调用FREE(ptr)重复释放
3一般未修复调用FREE(nullptr)时,触发assert(it!=nullptr)断言,程序崩溃直接调用FREE(nullptr)内存池安全处理空指针,不崩溃触发断言,程序异常退出
4严重未修复当工作线程退出时,线程本地缓存中仍持有未使用的内存块,未回收到中心缓存,导致这部分内存永久无法复用、无法释放,产生内存泄漏一个线程调用MALLOC(64)申请100次内存;线程退出,线程缓存自动将剩余内存归还给中心缓存,无内存泄漏线程退出后,线程缓存销毁,但持有的内存块未回收,造成内存泄漏
调用FREE(ptr)释放50次内存;
最后线程退出看申请和释放次数
5一般未修复当内存池向系统申请内存失败(超过最大限制)时,没有返回nullptr,而是直接抛异常,导致上次调用不捕获异常就会直接崩溃不断申请内存,耗尽内存池上限;申请失败,返回nullptr,上次判断返回值即可,程序不崩溃申请失败,直接抛异常,未捕获则程序崩溃
继续申请内存;
内存池向系统申请失败;
代码中执行了throw异常

7. 测试结论

本次项目测试通过,项目开发耗时1个月,项目测试耗时3天。
本次对自研高并发内存池进行了功能测试、安全测试、性能测试。测试结果表明,内存池的核心功能(内存申请、释放、内存块复用)均可正常工作,在多线程高并发场景下性能明显优于系统malloc,能够有效降低多线程锁竞争带来的性能损耗。
但在测试过程中也发现了若干影响稳定性和安全性的问题:

  1. 线程退出时,线程缓存所持有的内存块未回收到中心缓存,导致长期运行下出现内存泄漏
  2. 申请内存超过内存池最大限制时,内存池未按常规返回nullptr,而是直接抛异常,影响上层调用健壮性

综合评估:
本内存池核心功能正常,高并发性能优势明显,但在内存泄漏与异常处理规范上仍存在缺陷,整体满足设计目标,测试通过。部分模块可进一步优化,以提升长期运行稳定性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值