动态库优化——Prelink(预连接)技术

Prelink是Red Hat的Jakub Jelinek设计的工具,用于提前完成动态库的链接工作,以减少程序启动时间和内存开销。通过预处理动态共享库和可执行文件,Prelink在系统启动和应用程序执行时能显著提高效率,尤其适用于嵌入式系统。然而,每次更新动态库后,相关程序需要重新Prelink。文章提供了Prelink的使用方法和配置文件示例,并强调了位置无关代码(-fPIC)在Prelink中的重要性。
摘要由CSDN通过智能技术生成
 

PrelinkRed Hat 开发者 Jakub Jelinek 所设计的工具,正如其名字所示,Prelink利用事先链接代替运行时链接的方法来加速共享库的加载,它不仅可以加快起动速度,还可以减少部分内存开销,是各种Linux架构上用于减少程序加载时间、缩短系统启动时间和加快应用程序启动的很受欢迎的一个工具。

我们在上一章中详细介绍了动态链接和加载的过程,这种运行时的动态链接尤其是重定位(relocation)的开销对于大型系统来说是很大的。相比之下,早期UNIX下的a.out格式的老式链接方法在速度和占用内存方面有明显的优势(但不如ELF格式更灵活,能方便的构建动态共享库)。Prelink工具是试图在保持一部分灵活性的基础上,借鉴a.out格式在速度和占用内存方面的优点,对ELF文件进行一些改进。

事实上,Prelink工具的原理主要基于这样一个事实:动态链接和加载的过程开销很大,并且在大多数的系统上, 函数库并不会常常被更动, 每次程序被执行时所进行的链接动作都是完全相同的,对于嵌入式系统来说尤其如此。因此,这一过程可以改在运行时之前就可以预先处理好,即花一些时间利用Prelink工具对动态共享库和可执行文件进行处理,修改这些二进制文件并加入相应的重定位等信息,节约了本来在程序启动时的比较耗时的查询函数地址等工作,这样可以减少程序启动的时间,同时也减少了内存的耗用。

Prelink的这种做法当然也有代价:我们每次更新动态共享库时,相关的可执行文件都需要重新执行一遍Prelink才能保证有效,因为新的共享库中的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值