Lobsters | 📄 原文链接 | 2026-11-03 收录 · 热度 12

失落的 malloc:从 Unix V4 源码看内存分配的起点

来源:napcakes.nekoweb.org — 2026-11

📋 概述

作者做了一次 Unix 考古,去读 V4(1973 年 11 月)里怎么分配内存。V4 的特别之处是内核大部分已经用(他称之为中世纪的)C 写成;更巧的是一份 V4 磁带直到去年才在储藏室里被翻出来,此前被认为永久失传。第一条线索在 C 工具链的 c20.c 里:alloc() 就是个线性分配器——对齐大小、看区域够不够、不够就 sbrk(2000) 扩,失败直接 exit,所以调用方从不检查 NULL;用 sbrk 扩堆不会让已有指针失效,而且它根本不 free,因为一切都活到程序结束。他认为最有意思的是 Dennis 目录下的 malloc.c:malloc 多收一个 map 参数,mfree 还要把大小传回来,而 map 就是 coremap 与 swapmap 两块扁平内存区——这种按显式区域分配的接口,今天看来远好于传统的 malloc/free。

🔑 核心要点

💡 金句

这是我读过别人代码时最开心的一次——大概是因为它的历史分量。
← 返回 Lobsters 首页