|
|
Beta 2" J+ M% _& V& J, U: d
8 k" T; }8 z6 R) n: I4 O
本书预计供下述几类读者使用。# F7 w+ o' d3 y3 M0 t' B. ^# O5 p
学生:由于链接过程看起来似乎是微不足道和显而易见的,编译器构建和操作系统
8 F0 C. A* W4 p课程通常对链接和加载都缺乏重视。这对于以前讨论Fortan,Pascal,C,和不使& G0 h3 B" I* o H$ C& o: R
用内存映射或共享库的操作系统而言可能是对的,但是现在就不那么正确了。- @6 {# V/ ]) G: m
C++,Java和其它的面向对象语言需要更加完善的链接环境。使用内存映射的可执
. [/ p7 {3 P4 z行程序,共享库,和动态链接影响了一个操作系统的很多部分,一个忽略链接问题! K+ C* X7 v) V0 Z& M+ ~- w
的操作系统设计者将承担巨大的风险。 R0 {# _0 p+ |. M) U
实习程序员也需要知道链接器都做了什么,尤其是对现代语言。C++在链接器中放
. @1 L i6 \- p. G置了不少独特的特性,而大型C++程序容易发生难以诊断的bug也是由于在链接时" T! E' d- G: Y0 ?
发生了不可预料的事情(最常见的情况是静态构造函数没有按照程序员预计的顺序2 ?5 V9 @" C! s; v" l9 m
执行 )。 当正确使用时,诸如共享库和动态链接此类的链接器特性将(给程序员
# F4 O2 k, V- G- g* L的工作)带来很大的灵活性和强大支持。
8 {* Q. `8 X! ?4 ^. ^# a% \# X 语言设计者和开发人员应该在构建语言和编译器时了解链接器会做什么和能做什么。
9 {6 _; k7 L' j0 n+ F& ]由于可以由链接器处理某些细节,那些手工进行了30多年的编程任务今天在C++中
2 T+ N/ Z5 L, J, n+ S A7 b$ J. V可以自动处理了(想一想在C语言中为了获取和C++中的模板相同的功能,或为了3 x. B' Z% m+ ^6 @ |2 S7 h7 U
保证在程序主体执行之前使成百个C源文件中的初始化例程可以执行,程序员不得
) y' ^, M% J1 f1 |6 Q3 m1 d不做的那堆事情)。有了功能更强大的链接器的支持,未来的语言将更加自动化而
7 L3 p) L1 A: q, t7 v不仅限于程序范畴内的常规任务。由于链接是编译过程中将整个程序的代码放在一
& e) A) N: e$ K8 p x起处理并可对程序作为一个整体施加影响的唯一阶段,因此链接器还将被加入更多
, J8 e' k- g* @. ?8 i的全局程序优化功能。 - |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?加入计匠网
×
|