Skip to content

About

rpmalloc 源码剖析与多核并发图解

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

27 Commits

Folders and files

Repository files navigation

🚀 Rpmalloc 源码硬核剖析与核心机制重构 (精简教学版)

极简、硬核、无损。 本项目对 rpmalloc 的庞大源码进行了核心骨架抽离,在完全不损失任何性能的前提下,为高并发内存分配器的学习者提供一个核心机制实现参考。


⚡ 项目核心特色 (Why this repo?)

许多人面对原版 rpmalloc 几千行的工程代码望而却步,本项目旨在降低阅读源码的门槛:

  • 核心代码抽离:砍掉一切工程冗余,整套项目仅保留 rpmalloc、rpfree 以及 初始化 3 个最核心的对外物理接口。从3000行代码变成 1250行代码
  • 保留纯粹机制:完整保留了 rpmalloc 赖以生存的核心内存池机制、Span/Page/Block 级拓扑、多线程完全隔离以及免自旋无锁链表 (Mailbox) 交互。
  • 轻量化做减法:去除了对学习核心机制毫无帮助的 Huge 缓存机制,避免学习者陷入工程细节泥潭(详细可阅读原版)。环境:Ubuntu 24.04.4 LTS + GCC 13.3.0(去除了原版的跨平台可移植性,x86-64 物理底层)。
  • 性能完全无损:由于底层的物理内存池结构、位运算对齐算法和无锁 CAS 路径完全基于原版高标准保留,经过虚拟机二核实测,经虚拟机多线程压力测试,重构版吞吐性能(除Huge)与原版无明显差异!

📂 仓库目录导读

  • 📁 1. 代码:精炼、干净、带有中文深度物理级注释的重构版核心源码。
  • 📁 2. 图解:
    • 01.图解_基础篇.png:攻克多线程隔离、Heap/Span/Page 物理堆栈基础拓扑以及设计理念。
    • 02.图解_进阶篇.png:攻克获取SPAN PAGE的机制, 线程死亡时机制, 多核并发硬件理论及具体原子操作解释。
  • 📁 3. 学习过程:记录攻克底座、死磕位运算逻辑的心路历程与推导草稿。
  • 📊 简单测试_性能对比.png:高并发多线程压力下,精简版与原版、标准内存分配器的吞吐性能物理实测对比。

🛠️ 编译与测试指南 (Quick Start)

本项目在 1.代码/ 目录下提供了完整的测试源码。学习者可以使用 GCC 直接编译并运行性能测试,亲眼见证重构后的高并发吞吐实力。

1. 编译并运行多线程及线程死亡测试 (main_5.c)

gcc my_rpmalloc.c main_5.c -o test_main_5_mine -lpthread -O3

gcc rpmalloc.c main_5.c -o test_main_5_orig -lpthread -O3

2. 编译并运行高并发跨线程释放性能测试 (main_6.c)

gcc my_rpmalloc.c main_6.c -o test_main_6_mine -lpthread -O3

gcc rpmalloc.c main_6.c -o test_main_6_orig -lpthread -O3

上述的main_5.c 第13行开关 教学/原版,第38行 5是去除Huge,6是加上Huge

⚖️ 许可与使用条款 (License & Terms of Use)

本项目采用双重授权(详见根目录 LICENSE 文件):

  1. 代码部分:严格遵守原作者的 MIT 许可证。
  2. 图解与剖析文档:采用 CC BY-NC-SA 4.0 (署名-非商业性使用-相同方式共享) 国际协议保护。

一共只在Github和Gitee平台记录
GitHub:https://github.com/YQwQ/rpmalloc-analysis
Gitee:https://gitee.com/onetwoyi/rpmalloc-analysis

About

rpmalloc 源码剖析与多核并发图解

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages