【考验对象:丹尼斯·里奇。当前水平——??】

【考验形式:情景模擬】

【考验內容:考查对c语言的使用能力、理解水平】

【注意——胜,则破境;败,则退回当前境界大圆满,需重新积累】

挥去面板,眼前的画面才逐渐清晰起来。

房间不大,天花板的日光灯管有些昏暗,照不清墙上掛著几张手写的草图。

李林抬眼望去。

一台pdp-11小型机占据了就摆在房间中央的桌子上,机箱侧盖被卸了下来,露出里面密密麻麻的线路板。

unix,现代作业系统的奠基者,就在这里诞生。

同样会在今天诞生的,还有作业系统的原初圣言、资讯时代的拉丁语、程式设计师的白月光……

咳咳,什么叫这里放不下这么多语言。

总之,李林此行就是为此而来——

c语言。

他深吸一口气,终於直视面前的男人,也是这次考验的“考官。”

三十岁出头、深色头髮有些凌乱,依旧格子衬衫、依旧黑框眼镜,也许是程式设计师的刻板印象来源也说不定。

丹尼斯·里奇,c语言之父。

他一只手撑著桌面,另一只手夹著笔,眉头紧锁。

本书首发 101 看书网书库广,????????????.??????任你选 ,提供给你无错章节,无乱序章节的阅读体验

和上次一样。

“孩子,”

注意到李林的瞬间,里奇开口了,嗓音有些沙哑,

“我需要为內核构建一个更可靠的內存分配器,来管理所有內核对象。现在的版本太脆弱了,一碰到复杂的操作就崩溃。”

“说来惭愧,即便是我,也没法判断亲手释放“指针”这个怪物,究竟是对是错。有时候它太危险,恨不得让我把它封装进盒子里;但有时候,它带来的高效又是如此美妙,总让我想起我为自己定下的那句誓言——”

“keep it simple stupid。”

“保持简单吧,孩子。”

他说著,把一张几乎画满的草图推到李林面前,眼里有疲惫,也有审视,

“我需要你提出一个方案,一个简单的方案。”

李林不是第一次听到这个问题了。

上一次站在这里的时候,他束手无策。

面对里奇那双深邃的眼睛,他连第一步都没能迈出去。

那时候他的脑子里还只有基础的內存分配。

malloc、free、栈上分配、堆上分配……他连从哪里开始都不知道。

所以他失败了。

这一次不一样了。

他点点头,平静地接过了这个委託。

忽然,面前的空间展开,化成一张巨大的、向四面八方无尽延伸的方格纸。

每一个小格子代表一个內存单元,被占用的、空閒的都一一陈列於此。

它们都在等待创造者的规划安排。

前提是你能在它们服从秩序之前,保证自己不被混乱击穿大脑。

“这就是你的画布,孩子。b语言没能征服它,我们来试试。”

里奇的声音从身后的虚空中传来,李林定了定心神。

动手。

首先要解决“我是谁”的问题。

每一个分配出去的內存块,它必须知道自己多大、属於谁、下一个是谁。

李林开始用struct定义內存块的头部信息,包括块的大小、是否空閒和炼表指针。

他在方格纸上画下第一道箭头,从一块內存的头部指向下一块,再指向下一块,把那些散落的格子串成一条链。

由此,他便实现了最基础的alloc和free。

遍歷炼表,找到第一块足够大的空閒块,分配出去,释放时標记为空閒,和相邻的空閒块合併。

方格纸上,逐渐开始有了秩序。

“太慢了。”

里奇的声音再次响起,这次带著毫不掩饰的失望,

“每次分配都要从头遍歷,这在系统內核里根本不能用。你这个版本比那些老古董手写的汇编还要差。”

李林盯著方格纸上那条长长的炼表。

玄幻魔法小说相关阅读More+

斗罗龙王:吾为神王,镇压一切敌

佚名

我在德国当文豪

佚名

红楼:什么叫黛玉是我青梅竹马

佚名

寂静的冬天

佚名

烽火山河:黑金血脉

佚名

我以秦腔镇戏鬼

佚名