程序链接、加载装入_vo3q07chg7lnxvyc

    502
    最后修改于

    链接#

    将编译后形成的目标模块以及库函数链接在一起形成完整模块。
    静态链接:在程序运行前,将目标模块链接。将多个模块链接时,需要解决两个问题

    • 修改成统一的相对地址
    • 变换外部调用符号,将对应的外部调用符号改编为相对地址

    装入时动态链接:装入内存时,边装入边链接,便于修改 / 更新 / 共享
    运行时动态链接:可以加快装入过程和程序体积。
    装入内存方式
    绝对装入:单道程序环境,编译时就已知程序运行时在内存中的地址。产生基于绝对地址的目标代码。绝对装入程序依据程序给出的地址进行定位。
    可重定位装入:多道程序环境。多个目标模块起始地址都视为 0,程序中其他地址都是相对地址。装入时修改起始地址(静态重定位)。这种情况下需要一次分配所有内存空间(不考虑虚拟内存)。
    动态运行时装入(动态重定位):装入程序把模块装入内存后,不立即把相对地址改为绝对地址。而是把这种地址转换推迟到程序真正要执行时进行。一次装入内存的地址均为相对地址,需要一个重定位寄存器支持。可以让程序内存不连续,可以只装入部分代码,动态申请分配内存。
    image.png
    进程内存映像
    程序调入内存之后,内存中的部分,区分为代码段、数据段、堆区、栈区、PCB 等内容

    • 🥳0
    • 👍0
    • 💩0
    • 🤩0