序言
虽然已经看过了第八章和第九章,但是第七章很多部分仍旧模糊,所以要弄清楚链接的几个点,于是开始阅读《程序员的自我修养》,以此弄懂。
重定位
当下的计算机技术有意思的是,它不是凭空而来,而是迭代更新发展而来,教科书上通常只写当下,所以让人莫名其妙。当了解了技术的发展轨迹之后,就会觉得原来如此。
重定位起源于纸带时代,那时候程序写在纸带上,0就打个孔,1不打孔,当程序中有跳转指令时,打个比方:0001 Addr时候,0001 表示跳转,Addr表示跳转目标的地址。当程序修改后,这个Addr的值就会变化,这个时候就要手动重新计算新的Addr,然后写在纸带上,这个过程就是重定位。最初的重定位看起来直观,但是很繁琐,容易出错,事实上也是如此,后来发明了汇编语言,引入了符号,如jump foo, 这foo可能是个函数开始的标识,我们就可以随便修改代码,foo的地址在汇编时计算出来,不用我们手动计算,这样就方便多了。然而汇编是把所有的代码放在一个文件里,这不好维护。后面又发展出来其他高级语言如C,代码的组织形式也走模块化路线,不同的功能的代码放在不同的文件里,这样就更容易维护了,但是这使得函数的调用实现起来更有难度了,由此引出了符号解析和链接。
符号解析
未完待续。。。