69阅读网

记住本站地址不迷路:www.69ydw.com
69阅读网 > 这个学霸还在叠数值 > 第20章 考验

第20章 考验

是啊,所以需要一些新东西了。

李林握了握拳头,闭上眼睛,回想起这些天来自己的所学所思。

首先,他想到的是自己在现代编程中见过的——

內存对齐技术。

对齐到2的冪次,用地址本身来编码信息。

再结合之前胡云程提过的“细胞”,两个思路撞在一起,解法也就应运而生了。

伙伴算法。

將內存按2的冪次分割成块。

当请求来临,找到刚好大於等於请求大小的块。

如果块太大,就一分为二,“伙伴对伙伴”,直到大小合適。

回收的时候,检查伙伴是否也空閒,如果是就合併回去。

最关键的是,计算伙伴地址不需要遍歷,不需要查表。

只需要一次位运算。

於是,李林在方格纸上重新画了一遍。

这次不再是长长的炼表,而是一棵二叉树。

每个节点都有它的伙伴,每个伙伴都在一个固定的位置上等它。

他用位运算代替了浮点和除法,用地址本身作为定位伙伴的坐標。

方格纸上,一棵由箭头组成的二叉树缓缓展开。

从根到叶,从小到大,每一对伙伴节点都互相呼应。

里奇第一次露出了惊讶的表情。

他盯著那张方格纸,沉默了好一会儿,才呢喃道,

“不是炼表,是树吗……好,太好了。”

里奇不由自主地鼓起掌来,抬起头看著李林,

“能做到这一步,你其实已经算是通过考验了。”

李林闻言,还没来及高兴,就听到里奇的后半句——

“但是,孩子,我不知道你来自哪里、也不知道你要去往何方。”

李林:?

不是,你这话说的就好像……

李林皱起眉头,下意识后退了一步。

里奇笑了笑,眼中闪过一道精光,

“我唯一知道的事情是,你,真的让我兴奋起来了。”

【检测到考验已通过,即將脱离模擬考验……】

“哦,真是有趣,这也是计算机的一种吗?”

隨著里奇轻轻挥手,李林眼前蓝色的光幕竟然消失了——

【&%*#¥%%】

系统提示变成了一串乱码。

“不要著急,再陪我待会儿吧,孩子。”

考验没有结束。

“速度可以了。”

里奇敲了几下键盘,方格纸上又起了变化。

有几块內存被標记为“已分配”,每一块上面都掛著一个指针。

“但我的同事不小心写了一段代码,错误地释放了同一个对象两次。”

free(ptr); free(ptr);

同一块內存,被释放了两次。

一瞬间,方格纸被染成血红。

第二次释放触发了已经合併的伙伴节点,指针指向了已经被重新分配出去的地址。

错误像连锁闪电一样从一个节点蔓延到所有节点,整棵二叉树开始崩塌。

那些串联的箭头一根接一根地断裂、消散。

“你该如何应对呢?”

不是,哥们儿。

什么叫考完试,考官拉著我不让走啊?

李林额头微微冒汗。

『记住本站地址 www.69ydw.com』