關(guān)于程序裝載時的方案,windows和linux采用了不同的方案,在對這兩進(jìn)行比較的時候,書中提到了"空間換時間的案例"這個概念木羹。
然后我腦洞小開赋访,想到了之前看過的一個泰國電影《天才槍手》,男女主角從泰國打飛的到澳大利亞考SAT锻梳,就是想利用澳大利亞和泰國的時差衫画,從某種程度上來說睡榆,也算是空間換時間的一個例子了场航。
以下是書中的內(nèi)容小總結(jié),希望通過“空間換時間”這個例子來幫助自己理解和記憶廉羔。
Windows PE的DLL重定基地址方案溉痢,會比較浪費(fèi)內(nèi)存僻造。比如當(dāng)一個DLL被多個進(jìn)程共享,并且這個DLL被這些進(jìn)程裝載到不同的位置孩饼,那么每個進(jìn)程都需要有一份單獨(dú)的DLL代碼段的副本髓削。(因?yàn)镈LL代碼段不是地址無關(guān)的)
Linux ELF的共享對象代碼段地址無關(guān)方案,比DLL重定基地址方案镀娶,更加節(jié)省內(nèi)存立膛,但是由于ELF的PIC機(jī)制需要對外部數(shù)據(jù)和函數(shù)的引用計(jì)算GOT位置,所有理論上速度會比DLL重定基地址方案更慢梯码。