Lazy loaded image
🪒内存池优化
Words 718Read Time 2 min
2026-4-14
2026-4-28
type
Post
status
Published
date
Apr 14, 2026
slug
mSharp
summary
基于 C++ 的操作系统内存池项目,核心目标是用分级缓存的方式减少频繁 new/delete 带来的系统调用开销和锁竞争。
tags
操作系统
必看精选
category
计算机科学
icon
password
类型
日期
标签
概述
状态

高性能内存池设计项目

基于 C++ 的操作系统内存池项目,核心目标是用分级缓存的方式减少频繁 new/delete 带来的系统调用开销和锁竞争。

仓库地址

memory-sharp
UonlraUpdated Apr 14, 2026

项目示例

项目亮点

  • 小对象分配采用 ThreadCache -> CentralCache -> PageCache 三层结构。
  • 线程本地缓存优先命中,降低多线程下的共享锁竞争。
  • 中心缓存按 Span 管理对象批量切分与回收。
  • 大对象绕过小对象缓存,直接走独立 Span
  • 提供了简单基准测试,方便在复试时演示性能提升。
  • 新增可视化展示界面,可直接展示项目成果、架构作用和性能对比。
  • 当前 benchmark 固定为 128 组代表性场景,兼顾覆盖度、稳定性与展示可读性。

目录结构

  • include/memory_pool.h:核心接口与数据结构定义。
  • src/memory_pool.cpp:内存池实现。
  • src/main.cpp:演示与压测程序。
  • ui/index.html:项目可视化展示界面。
  • ui/data/benchmark_report.json:程序生成的性能对比报告。
  • docs/project_notes.md:知识点清单与面试问题。
  • docs/vibe_interview.md:按照 vibe coding 风格整理的模拟提问脚本。

如何构建

方式一:直接使用 Makefile

方式二:使用 CMake

可视化界面使用

先运行程序生成最新 benchmark 报告:
然后打开下面这个页面即可查看可视化展示:
ui/index.html
页面会突出展示:
  • 项目作用与适用场景
  • 三层缓存架构与 Span 管理思路
  • 默认分配器和内存池的图例对比
  • 128 组 benchmark 的柱状图、线型图与加速比趋势
  • 复试时可直接讲的项目成果

测试场景说明

当前项目固定采用 128 组代表性测试场景:
  • 8 档线程数:1, 2, 4, 8, 12, 16, 20, 24
  • 16 档对象大小:8, 16, 24, 32, 48, 64, 96, 128, 160, 192, 256, 384, 512, 640, 768, 1024
  • 8 × 16 = 128
这样设计的原因是:
  1. 覆盖线程数和对象大小两个关键维度。
  1. 比超大规模测试更稳定,单场景运行时间更充分。
  1. 更适合在页面中通过表格、柱状图和线型图进行展示。

线型图说明

页面中新增了两张用于趋势分析的线型图:
  1. 平均耗时 vs 线程数 用于观察在不同线程数下,默认分配器和内存池的平均耗时变化。
  1. 平均加速比 vs 对象大小 用于观察在不同对象大小下,内存池相对于默认分配器的平均性能收益。
 
上一篇
dount
下一篇
在线简历