在考虑如何为80286程序实现链接器时,我遇到了以下问题:
给定一个整数 n 和一组每个部分的大小不大于 n 的部分,找到 S 的分区分区数量最少,因此在每个分区中,区段大小的总和不会超过 n 。
尝试将对象文件链接到16位保护模式下的80286体系结构的程序时,会出现此问题。该体系结构具有每个高达65536字节的段,并且复杂程序需要被分成多个段。链接器尝试将程序安排到尽可能少的段中,因为每个段对应于操作系统的段描述符表中的一个条目。请考虑此问题,而不考虑16位保护模式已过时的事实。
作为这个问题的一个复杂问题,可以考虑将程序的调用图链接起来。考虑到代码段的每次更改都有一点损失(CPU必须在段描述符表中查找新段)的情况,链接器可以尝试将函数分组到相互调用的相同部分。当调用图按预期的调用次数加权时,链接器可能会尝试将程序划分为段,以便跨越段边界的调用图的边具有最小的平方和/平方和。