【问题标题】:dynamic linking v/s dynamic loading动态链接与动态加载
【发布时间】:2014-07-21 14:07:21
【问题描述】:

我已经阅读了很多关于这个主题的资料,但仍然停留在一些概念上。

--我知道在动态链接中,链接被推迟到运行时,也就是说,在编译时我们不知道库代码相对于主源的位置。这有助于实现共享库的概念,即该进程可以使用其他进程使用的库代码。

--我不明白动态加载中发生了什么。链接是静态完成的吗?如果它是静态完成的,那么将加载推迟到运行时的目的是什么?这是自动的还是程序员需要干预(进行一些调用以加载库)?

谢谢!

【问题讨论】:

    标签: operating-system dynamic-linking dynamic-loading


    【解决方案1】:

    这是两个不同的概念。我不会详细说明动态链接,您的描述已经足够了。

    动态加载是指可执行代码的某些部分不是在程序启动时加载到内存中,而是在执行的后期加载,通常是在需要时加载。代码位于某个外部库中。

    动态加载的原因可能多种多样,通常与资源利用率有关 - 例如,在执行期间尽量减少 RAM 使用量,尽量减少程序启动时的加载时间等。

    动态加载的使用不受操作系统控制,而是由程序员通过操作系统提供的功能控制。驻留在外部库中的代码,主要程序接口并根据程序的本地逻辑在某个阶段加载它。

    【讨论】:

    • 感谢您的回答。那么在动态加载的情况下链接是静态的吗?
    • @ishan3243 不,是动态加载的情况下的动态联动。否则,代码驻留在同一个可执行文件中,该可执行文件完全由操作系统加载到内存中。您可以将动态链接视为一种传达动态加载的方法。
    • 根据此链接quora.com/Systems-Programming/… ...该人描述了链接和加载的四种组合.....您在说哪一种?该链接是否正确描述了它?
    • @ishan3243 该链接是一个很好的参考。我主要指的是动态链接/动态加载案例,因为这是最常见和最有用的场景(最初我在回答中也包括了其他案例,但后来删除了它们)。静态链接和加载是另一种常见的组合,但我想它不在这个问题范围内。其他 2 种组合在今天更加深奥且不那么有趣。
    • > "使用动态加载...以最小化执行期间的 RAM 使用量"... 我的理解是,通过动态加载,您可以通过不同的程序将库的多个副本加载到内存中。而通过动态链接,操作系统加载单个副本,多个程序可以链接到该副本。它是否正确?如果是这样,动态加载不会导致更多的 RAM 使用,而不是更少?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多