# 高并发内存池 **Repository Path**: yue-huanyu/ck ## Basic Information - **Project Name**: 高并发内存池 - **Description**: 基于C++语言实现的高性能内存池 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-02-09 - **Last Updated**: 2026-03-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #### 介绍 基于 C++17 标准实现的高性能高并发内存池,采用「线程本地缓存 + 中央缓存 + 页缓存」三级架构,解决传统 `malloc/free` 在多线程场景下的锁竞争与内存碎片化问题。该内存池无锁化设计保证高并发分配效率,分级内存管理机制降低碎片率,可直接嵌入游戏服务器、网关、缓存系统等性能敏感场景。 #### 软件架构 核心采用**三级缓存架构**,从底层到上层依次为: 1. **页缓存(PageCache)**:以系统页(默认 4KB)为单位管理大块内存,直接与操作系统交互,负责向系统申请 / 释放内存,采用页级锁保证线程安全; 2. **中央缓存(CentralCache)**:作为 ThreadCache 与 PageCache 的中间层,管理不同大小类的内存块链表,采用桶级细粒度锁,平衡内存复用与并发性能; 3. **线程本地缓存(ThreadCache)**:每个线程独立拥有的缓存,无锁化分配 / 释放内存,是性能核心,仅当本地缓存不足 / 过剩时与 CentralCache 交互。 辅助模块: - `Common.h`:内存对齐、大小类划分、公共工具函数; - `ObjectPool.h`:基于内存池封装的通用对象池模板; - `ConcurrentAlloc.h`:对外暴露的统一分配 / 释放接口,适配多线程场景。 #### 安装教程 1. **环境要求** - Windows:Visual Studio 2022 及以上(支持 C++17); - Linux:GCC 9+/Clang 10+(支持 C++17); - 无第三方库依赖,仅依赖系统标准库。 2. **Windows 编译** - 下载项目源码,打开 `Concurrency Memory Pool.sln` 解决方案; - 选择 `Release | x64` 配置,点击「生成解决方案」; - 编译产物输出至 `x64/Release/` 目录。 3. **Linux 编译** ``` # 克隆仓库(替换为你的 Gitee 仓库地址) git clone https://gitee.com/你的用户名/高并发内存池.git cd 高并发内存池 # 编译源码 g++ -std=c++17 -O2 -pthread -o memory_pool *.cpp # 验证编译结果 ./memory_pool ``` #### 使用说明 1. **基础使用(内存分配 / 释放)** ``` #include "ConcurrentAlloc.h" int main() { // 分配 256 字节内存(自动按 8 字节对齐) void* ptr1 = ConcurrentAlloc(256); // 分配 1024 字节内存 void* ptr2 = ConcurrentAlloc(1024); // 使用内存(示例:写入数据) memset(ptr1, 0, 256); memset(ptr2, 0, 1024); // 释放内存 ConcurrentFree(ptr1); ConcurrentFree(ptr2); return 0; } ``` 2. **对象池使用(自定义类型)** ``` #include "ObjectPool.h" #include // 自定义测试类 class TestObject { public: int id; std::string name; TestObject(int id_, std::string name_) : id(id_), name(name_) {} }; int main() { // 创建 TestObject 类型的对象池 ObjectPool objPool; // 从对象池分配对象(构造函数传参) TestObject* obj = objPool.New(1001, "test"); // 使用对象 std::cout << "ID: " << obj->id << ", Name: " << obj->name << std::endl; // 归还对象到池(自动析构,复用内存) objPool.Delete(obj); return 0; } ``` 3. **性能测试** ``` # 运行基准测试(对比内存池与 malloc 性能) ./benchmark # 运行单元测试(验证功能正确性) ./unit_test ``` #### 参与贡献 本项目为个人独立开发的学习与实践项目,暂不接受代码合入类贡献(如 Pull Request),但非常欢迎通过以下方式交流与反馈: 1. 提交 Issue:反馈 Bug、提出功能建议或性能优化思路; 2. 技术交流:通过 Gitee 私信 / 仓库留言讨论内存池设计、并发编程相关技术问题; 3. 学习参考:可 Fork 仓库用于个人学习、研究,无需提前告知。 #### 特技 1. 项目核心代码均为手写实现,无第三方内存池库依赖,可作为 C++ 高并发、内存管理方向的学习案例; 2. 配套完整的单元测试与性能基准测试代码,可直观对比内存池与系统分配器的性能差异; 3. 代码注释清晰,关键逻辑附带设计思路说明,便于新手理解三级缓存架构的实现原理; 4. 兼容 Windows/Linux 双平台编译,可直接在不同环境下验证功能与性能。