静态链接和动态链接

链接器:
	链结器、(Linker)又译为链结器、连结器,是一个程序,将一个或多个由编译器或汇编器生成的目标文件外加库链接为一个可执行文件。目标文件是包括机器码和链接器可用信息的程序模块。简单的讲,链接器的工作就是解析未定义的符号引用,将目标文件中的占位符替换为符号的地址。链接器还要完成程序中各目标文件的地址空间的组织,这可能涉及重定位工作。大多数现代操作系统都提供静态链接和动态链接两种形式。(连接的本质是把一个名字的实现代码绑定到它的每个引用语句上,同样的没有调用的部分,编译器不会为它生成可执行代码(除非生成DLL))
静态链接(摘自百度百科http://baike.baidu.com/view/945739.htm?fr=aladdin)
	Part A 静态链接是由链接器在链接时将库的内容加入到可执行程序中的做法。链接器是一个独立程序,将一个或多个库或目标文件(先前由编译器汇编器生成)链接到一块生成可执行程序。对于静态链接库中的函数库或者类库,如果你调用了其中的函数(无论是直接调用还是间接调用),那么链接器会从相应的库中提取这些函数的实现代码并把它们链接到你的应用程序中。如果你使用的是动态链接库,则运行时必须将所有DLL复制到运行环境的相应目录中。
	静态链接的最大缺点是生成的可执行文件太大,需要更多的系统资源,在装入内存时也会消耗更多的时间。
	像Unix ld程序这样的静态链接器(static linker)以一组可重定位的目标文件作为输入,生成一个完全连接的可以加载和运行的可执行目标文件作为输出。输入的可重定位目标文件由各种不同的代码和数据节(section)组成。指令在一个节中,初始化的全局变量在一个节中;而未初始化的变量在另外一个节中。
Part B:静态链接的优点
	大家都知道静态链接对SEO(搜索引擎优化 Search Engine Optimization)有很大益处,而且静态链接对服务器的负载很小,但静态链接的缺点是不能随时更新。对于伪静态的优点,这个并不好讲,伪相比动态链接而言,并没有提到速度的提升,相比较而言,因为是假静态链接,其实还是一个动态链接,也是同样需要翻译为静态链接的。最大的好处就是让搜索引擎把自己的网页当做静态网页来处理。
Part C:静态链接对seo的作用
静态链接对于搜索引擎常友好的,至于说为什么友好,可能有很多个人并不清楚,我们直接在优点里面,就能够找到搜索引擎喜欢的东西,搜索引擎最喜欢的就是速度快,网站速度快,表明你的网站服务器非常的好,虽然说这个速度的提升常的微弱的,可能只有几豪秒,或者更少的速度提升,但是可能就是这一点点的时间,让搜索引擎更喜欢你呢。这样的理论和现象都是值得各位站长深思的,所以希望大家多做研究,争取总结出更多更好的经验。
Part D:静态链接要完成的任务:
	为了构造可执行文件,链接器必须完成两个主要的任务:
	1、符号解析(symbol resolution)。目标文件定义和引用符号。符号解析的目的是将每个符号引用刚好和一个符号定义联系起来。
	2、重定位(relocation)。编译器汇编器生成从地址0开始的代码和数据节。链接器通过把每个符号定义和一个存储器位置联系起来,然后,修改所有对这些符号的引用,使他们指向这个存储器位置,从而重定位这些节。
动态链接(摘自wikihttp://zh.wikipedia.org/wiki/%E5%8A%A8%E6%80%81%E9%93%BE%E6%8E%A5%E5%BA%93)
	优点:节约应用程序所需的磁盘和内存空间。在一个传统的非共享库中,一部分代码简单地附加到调用的程序上。如果两个程序调用同一个子程序,就会出现两份那段代码。相反,许多应用共享的代码能够切分到一个DLL中,在硬盘上存为一个文档,在内存中使用一个实例(instance),DLL的广泛应用使得早期的视窗能够在紧张的内存条件下运行。
	 2,DLL提供了如模块化这样的共享库的普通好处。模块化允许仅仅更改几个应用程序共享使用的一个DLL中的代码和数据而不需要更改应用程序自身。这种模块化的基本形式允许如Microsoft Office、Microsoft Visual Studio、甚至Microsoft Windows自身这样大的应用程序使用较为紧凑的补丁和服务包。模块化的另外一个好处是插件的通用接口使用。单个的接口允许旧的模块与新的模块一样能够与以前的应用程序运行时无缝地集成到一起,而不需要对应用程序本身作任何更改。这种动态扩展的思想在ActiveX中发挥到了极致。
	缺点::DLL地狱,也就是几个应用程序在使用同一个共享DLL库发生版本冲突。这样的冲突可以通过将不同版本的问题DLL放到应用程序所在的文件夹而不是放到系统文件夹来解决;但是,这样将抵消共享DLL节约的空间。目前,Microsoft .NET将解决DLL hell问题当作自己的目标,它允许同一个共享库的不同版本并列共存。由于现代的计算机有足够的磁盘空间和内存,这也可以作为一个合理的实现方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值