C++ 中动态链接的真正目的是什么?

问题描述 投票:0回答:1

我对此很陌生,不明白为什么当有

dynamic linking
时我应该使用
static linking

  1. 我知道
    dynamic linking
    会减小程序文件的大小,但如果它是
    custom dynamic library
    ,它仍然必须包含在安装程序中。所以,应用程序文件夹的最终大小不会改变。
  2. 如果机器上已经安装了外部库,如何在项目设置(vs、cmake、qmake)中确定并指定其位置。在
    dynamic loading
    期间,您可以通过系统调用或Windows注册表找到位置。但是
    dynamic linking
    期间该怎么做呢?

请帮助我,因为这两点我根本不明白为什么需要

dynamic linking
(我可以理解需要
dynamic loading
)。

c++ c dll static-libraries dynamic-library
1个回答
0
投票

动态链接不仅可以减少最终可执行文件的文件大小,还可以减少应用程序的内存占用。如果您有两个应用程序,两者都是静态链接的并且都使用公共共享库,那么同一共享库的两个副本将驻留在内存中,这是一种浪费。一般来说,您总是希望动态链接能够生成最小且最有效的代码。

那么什么时候适合使用静态链接呢?如果您不确定目标计算机的操作系统版本,静态链接您的应用程序可以确保您的应用程序运行,无论其版本如何。此外,安全应用程序(例如金融应用程序)也是一个很好的候选者,因为它通过为每个进程提供独立的环境来将一个进程与另一个进程隔离,并且任何应用程序之间都不会共享代码。此外,静态链接提供了更快的执行速度,因为我们在编译时复制了整个库内容。因此,我们不必在运行时运行未解析符号的查询。因此,我们可以比动态链接的程序更快地执行静态链接的程序。

© www.soinside.com 2019 - 2024. All rights reserved.