把 Markdown 解析器的内存砍到约 1/5:一节 C++ 内存优化实战课
来源: blog.kowalczyk.info — 2026-08-24
概述
作者在把 Rust 的 gpui-component 移植成 C++ 时顺手优化了其中的 markdown 解析器,目标是压缩 AST 节点大小。通过指针压缩(8 字节指针变 4 字节偏移)、在 arena 内原地增长字符串、重排字段消除填充、varint 编码字符串长度、融合互斥字段、用环形链表替代子节点 vector 等一系列手段,把 232 字节的单一 Node 结构压到 16 字节,同一份 64KB 输入的解析内存消耗整体下降约七到八成。
核心要点
- markdown-rs 构建 AST,优化目标就是压小每个节点;从 232 字节一路降到 16 字节。
- 用 arena 分配器做整体统计与指针压缩,把字符串开销从 16 字节减到 8 字节。
- 重排结构体字段、打包 bool 消除填充,再把子节点 vector 换成压缩指针的环形链表。
- 用 varint 编码字符串长度、delta 编码位置信息,整体内存比基线降低约七到八成。
金句
我们终于赢过了 Rust 原版。
👍 0
👎 0
返回 Lobsters 首页