Oracle® Solaris 11.2 链接程序和库指南

退出打印视图

更新时间: 2014 年 7 月
 
 

底层系统

应用程序是从动态可执行文件和一个或多个共享目标文件依赖项中生成的。动态可执行文件和共享目标文件的整个可装入内容在运行时映射到此进程的虚拟地址空间。每个进程通过引用内存中动态可执行文件和共享目标文件的单个副本进行启动。

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

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

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