《深入理解计算机系统》Part2 07:链接
2019-07-21 本文已影响0人
fengjb
摘要:主要介绍了一个程序如何从高级语言让CPU执行。编译只解决了如何将高级语言转变成机器语言,而链接则把这些机器指令放入了指定的地址空间,并分配好各个数据的栈空间,让CPU得以执行。
关键词:静态链接;动态链接
在之前的编译过程我们知道,高级语言将会变成机器语言中的一个个指令,而其中的数据则通过函数的帧栈进行存储,但是指令本身也需要放在存储器中才能被CPU读取,而且一个程序往往还需要调用其他的函数,其他的文件,这些所有的指令之间应该怎么编址,这些都是需要链接过程去做的。
比如一个超链接,他背后会链接到一个URL,你点击就会跳转到那个URL中。链接也是一样。你的函数可能需要调用一些库函数,或者别的其他文件中的函数,那么这个函数名就如同一个超链接,在运行之前,你必须给这个函数名指定他的地址,才会跳转。
动态链接则是指,如果很多程序调用的是同样的库函数,为每一个程序都拷贝一套指令过去,然后编址,这样就浪费空间,所以就将每个程序调用的公共库函数做出动态链接库,每个函数调用这个库的时候,超链接指向的都是同一套指令。这套指令就如同共享变量一样。可以被多个进程所共享。
链接的过程,说白了,就是将你的程序执行所需要的所有的机器指令编址,让CPU能够按着地址执行下去。