Lobsters | 📄 原文链接 | 2026-11-10 收录

malloc 到底在干什么:从 sbrk 到空闲链表一步步写个分配器

来源:benmandrew.com — 2026-11-08

📋 概述

接口极简的 malloc 背后是用户态的记账工作。作者用 strace 展示:连续 malloc(16) 一千次只有两次 brk 系统调用——第一次问程序断点在哪,第二次把堆扩了 132 KiB,其余 999 次都从这块已拿到的内存里切。原因很直接:空系统调用要 575 ns,sbrk(16) 610 ns,而 malloc(16) 只要 26.9 ns,快 22.7 倍。于是他从一个只会 bump 的玩具分配器开始,逐级补上 chunk 头、空闲链表、分割与合并、需求分页、trim 归还内存,最后在 128 KiB 以上改用 mmap。

🔑 核心要点

💡 金句

同样的 16 字节请求,malloc 比 sbrk 快 22.7 倍。
← 返回 Lobsters 首页