拆开 Hical:你的协程内存去哪里了?三层 PMR 内存池设计
[Hical] 你的协程内存去哪里了?三层 PMR 内存池设计 本专栏文章:拆开 Hical · 第 6 篇 前几篇我们都在聊"怎么做",这篇聊"内存去哪了"。 HTTP 服务器处理一个请求时,至少有这些内存分配:读缓冲(8KB)、请求头解析、URL decode、body 字符串、JSON 对象、响应序列化缓冲、中间件属性注入。每秒 10 万请求 → 每秒数百万次的 malloc/free。 C++17 的 PMR(多态内存资源)给了我们一个机会——换掉默认的 new/delete,用分层的分配器策略。Hical 把这个机会用到了极致。 1. PMR 的最简入门 如果你没用过 PMR,这里 30 秒快速理解: 1 2 3 4 5 6 7 8 // 传统方式:全局 new/delete(不知道这内存在哪、持续多久) std::string s = "hello"; // malloc → free // PMR 方式:你指定分配器的"上游" char buf[1024]; // 栈上的一块内存 std::pmr::monotonic_buffer_resource pool(buf, sizeof(buf)); std::pmr::string s("hello", &pool); // 分配在栈上的 buf 里! // pool 析构 → buf 回收 → 不需要 free! PMR 的核心思想:分离"我要内存"和"从哪拿内存"。 不同的分配器适合不同的场景: ...