覆盖 (编程)

维基百科,自由的百科全书
跳转至: 导航搜索

在一般计算机概念中,覆盖overlay)表示“把一块指令或数据换为另外一块。”覆盖是一种编程方法,使得程序大小比主存空间大的时候也可以运行。嵌入式系统由于没有虚拟内存机制,也会因为物理内存的限制而使用覆盖技术。

用法[编辑]

构建一个覆盖程序需要程序员手动把程序分割为独立的目标代码。 覆盖管理器由操作系统或程序自身提供,用来从外存读取所需数据并交换到主存。 通常,链接器都会提供了对覆盖的支持。

例子[编辑]

下例展示了用来使OS/360链接编辑器链接一个覆盖程序的控制语句。

 INCLUDE SYSLIB(MOD1)
 INCLUDE SYSLIB(MOD2)
 OVERLAY A
   INCLUDE SYSLIB(MOD3)
     OVERLAY AA
       INCLUDE SYSLIB(MOD4)
       INCLUDE SYSLIB(MOD5)
     OVERLAY AB
        INCLUDE SYSLIB(MOD6)
 OVERLAY B
    INCLUDE SYSLIB(MOD7)
                       +--------------+
                       | Root Segment |
                       | MOD1, MOD2   |
                       +--------------+ 
                               |
                    +----------+----------+
                    |                     |
             +-------------+       +-------------+
             |  Overlay A  |       |  Overlay B  |
             |  MOD3       |       |  MOD7       |
             +-------------+       +-------------+
                    |
           +--------+--------+
           |                 |
    +-------------+   +-------------+
    | Overlay AA  |   | Overlay AB  |
    | MOD4, MOD5  |   | MOD6        |
    +-------------+   +-------------+