程序员的自我修养——动态链接
程序员的自我修养——动态链接

程序员的自我修养——动态链接

动态链接

动态链接确实有很多的优势,比静态链接要灵活的多,但它也是牺牲一部分性能为代价的, ELF 程序在静态链接下要比动态库稍微快一些,大约为 1%~5%。动态链接比静态链接慢的主要原因是动态链接下对于全局和静态的数据访问要通过 GOT 表定位,然后间接寻址,对于模块间的调用也需要 GOT 表,然后进行间接跳转,如此一来,程序的运行速度必定会减慢。另一个原因是动态链接的链接工作在运行时完成,即程序开始执行时,动态链接器需要进行一次链接工作,寻找并装载所需要的共享对象,然后符号查找地址重定位等工作,势必会减慢程序的启动速度。我们将在后面看到如何进行优化。

Read more
程序员的自我修养——动态链接

程序员的自我修养——动态链接

趁着借的图书馆的书还没还,赶紧看。写博客记录一下学习的内容便于以后反复看

静态链接使得不同的程序开发者和部门能够相对独立地开发和测试自己的模块。当随着时间,静态链接的问题也暴露出来:如浪费内存和磁盘空间,模块更新困难,这使得人们不得不找一种更好的方式来组织程序的模块。

Read more
程序员的自我修养-可执行文件的装载

程序员的自我修养-可执行文件的装载

可执行文件的装载与进程

可执行文件只有装载到内存以后才能被 CPU 执行。早期的程序装载十分简陋,装载的基本过程就是把程序从外部存储器中读取到内存中的某个位置。随着硬件 MMU 的诞生,多进程,多用户,虚拟存储的操作系统出现,可执行文件的装载过程变得非常复杂。

Read more
程序员的自我修养-静态链接