malloc 到底在做什么
来源:benmandrew.com — 2026-11-09
📋 概述
Ben Andrew 从一个简单实验讲起:循环调用 malloc(16) 一千次,用 strace 看,整个循环只有两次 brk 系统调用——第一次问堆尾在哪,第二次把堆扩大 132 KiB,其余 999 次都在已拿到的内存里切。文章接着给出进程地址空间图,并用几行 sbrk 手写 bump allocator,把「这块内存从哪来」讲透。
🔑 核心要点
- brk 是设置 program break 的系统调用,sbrk 只是 libc 上按增量移动堆尾的包装。
- 实测文本段、堆、libc 与栈之间相差 23.4 TiB,约为机器 15.6 GiB 内存的 1530 倍,绝大多数区间没有映射、不占物理内存。
- 每次分配都调 sbrk 等于每个请求一次系统调用,这正是 malloc 要一次性向内核要大块再自己切分的原因。
- 代价对比用计时做了量化:一百万次调用里,系统调用的开销一目了然。
💡 金句
malloc has a very nice and simple interface... But what's actually happening here?
👍 0
👎 0
← 返回 Hacker News 首页