链接程序和库指南

基础系统

使用共享库生成应用程序时,会在运行时将此目标文件的全部可装入内容映射到此进程的虚拟地址空间。每个使用共享库的进程通过引用内存中此共享库的单个副本来启动。

处理共享库中的重定位以将符号引用绑定到相应的定义。这会导致计算那些无法在链接编辑器生成共享库时得到的实际虚拟地址。通常,这些重定位会导致更新进程数据段中的项。

基于动态共享库链接的内存管理方案将按照页粒度在各进程之间共享内存。只要在运行时未修改内存页,便可共享这些内存页。如果某个进程在写入数据项或在重定位对共享库的引用时写入一个共享库页,则会生成此页的专用副本。此专用副本不会影响此共享库的其他用户。但是,其他进程无法共享此页。通过此方式修改的文本页称为不纯文本页。

映射到内存的共享库段分为两种基本类别,分别是只读的文本段和可读写的数据段。有关如何从 ELF 文件中获取此信息,请参见分析文件。开发共享库时的最重要目标是最大化文本段以及最小化数据段。这样可优化代码共享量,同时减少初始化和使用共享库所需的处理量。本节介绍有助于实现此目标的机制。