关灯
护眼
字体:大 中 小
上一章
目录
下一页
。当前水平——??】
【考验形式:情景仿真】
【考验内容:考查对C语言的使用能力、理解水平】
【注意——胜,则破境;败,则退回当前境界大圆满,需重新积累】
挥去面板,眼前的画面才逐渐清淅起来。
房间不大,天花板的日光灯管有些昏暗,照不清墙上挂着几张手写的草图。
李林抬眼望去。
一台PDP-11小型机占据了就摆在房间中央的桌子上,机箱侧盖被卸了下来,露出里面密密麻麻的线路板。
UNIX,现代作业系统的奠基者,就在这里诞生。
同样会在今天诞生的,还有作业系统的原初圣言、信息时代的拉丁语、程序员的白月光……
咳咳,什么叫这里放不下这么多语言。
总之,李林此行就是为此而来——
C语言。
他深吸一口气,终于直视面前的男人,也是这次考验的“考官。”
三十岁出头、深色头发有些凌乱,依旧格子衬衫、依旧黑框眼镜,也许是程序员的刻板印象来源也说不定。
他一只手撑着桌面,另一只手夹着笔,眉头紧锁。
和上次一样。
“孩子,”
注意到李林的瞬间,里奇开口了,嗓音有些沙哑,
“我需要为内核构建一个更可靠的内存分配器,来管理所有内核对象。现在的版本太脆弱了,一碰到复杂的操作就崩溃。”
“说来惭愧,即便是我,也没法判断亲手释放“指针”这个怪物,究竟是对是错。有时候它太危险,恨不得让我把它封装进盒子里;但有时候,它带来的高效又是如此美妙,总让我想起我为自己定下的那句誓言——”
“Keep it sile stupid。”
“保持简单吧,孩子。”
他说着,把一张几乎画满的草图推到李林面前,眼里有疲惫,也有审视,
“我需要你提出一个方案,一个简单的方案。”
李林不是第一次听到这个问题了。
上一次站在这里的时候,他束手无策。
面对里奇那双深邃的眼睛,他连第一步都没能迈出去。
那时候他的脑子里还只有基础的内存分配。
lloc、free、栈上分配、堆上分配……他连从哪里开始都不知道。
所以他失败了。
这一次不一样了。
他点点头,平静地接过了这个委托。
忽然,面前的空间展开,化成一张巨大的、向四面八方无尽延伸的方格纸。
每一个小格子代表一个内存单元,被占用的、空闲的都一一陈列于此。
它们都在等待创造者的规划安排。
前提是你能在它们服从秩序之前,保证自己不被混乱击穿大脑。
“这就是你的画布,孩子。B语言没能征服它,我们来试试。”
里奇的声音从身后的虚空中传来,李林定了定心神。
动手。
首先要解决“我是谁”的问题。
每一个分配出去的内存块,它必须知道自己多大、属于谁、下一个是谁。
李林开始用struct定义内存块的头部信息,包括块的大小、是否空闲和链表指针。
他在方格纸上画下第一道箭头,从一块内存的头部指向下一块,再指向下一块,把那些散落的格子串成一条链。
由此,他便实现了最基础的alloc和free。
遍历链表,找到第一块足够大的空闲块,分配出去,释放时标记为空闲,和相邻的空闲块合并。
方格纸上,逐渐开始有了秩序。
“太慢了。”
里奇的声音再次响起,这次带着毫不掩饰的失望,
“每次分配都要从头遍历,这在系统内核里根本不能用。你这个版本比那些老古董手写的汇编还要差。”
李林盯着方格纸上那条长长的链表。
是啊,所以需要一些新东西了。
李林握了握拳头,闭上眼睛,回想起这些天来自己的所学所思。
首先,他想到的是自己在现代编程中见过的——
内存对齐技术。
对齐到2的幂次,用地址本身来编码信息。
再结合之前胡云程提过的“细胞”,两个思路撞在一起,解法也就应运而生了。
伙伴算法。
将内存按2的幂次分割成块。
当请求来临,找到刚好大于等于请求大小的块。
如果块太大,就一分
本章未完,请点击下一页继续阅读>>『加入书签,方便阅读』
上一章
目录
下一页
天竹小说手机版 - 随时随地畅读精品小说
澜和文学手机站 - 小说阅读更轻便
知暮小说移动端 - 精选免费小说合集
山青小说手机版 - 畅读全网热门小说
月然书院手机版 - 小说迷的移动书架
风缤小说手机端 - 免费追更每一本好书
云初小说手机版 - 精选小说轻松看
寒涟小说手机版 - 小说更新实时推送
明歌小说手机站 - 精彩小说掌上读
清珏小说手机端 - 海量精品小说免费读
澜语小说移动版 - 小说迷的掌中宝
逸华小说手机站 - 热门小说即时更新
天桂小说手机版 - 免费小说随时读
风竹小说手机端 - 精选完本小说推荐
云明小说手机站 - 小说迷必备阅读站
书冉小说手机版 - 精彩小说免费在线
澜山小说移动端 - 精选原创小说合集
寒竹小说手机版 - 免费阅读完本佳作
清蝉小说手机端 - 小说迷的最佳阅读平台
风翎小说手机版 - 精选网络小说在线阅读