在某些情况下,选择静态链接而不是动态链接或反之,是否有令人信服的性能原因?我听过或读过以下内容,但我对这个主题了解不够,无法保证其真实性。

1)静态链接和动态链接在运行时性能上的差异通常可以忽略不计。

如果使用使用概要数据优化程序热路径的分析编译器,2)(1)是不正确的,因为使用静态链接,编译器可以优化你的代码和库代码。使用动态链接,只能优化您的代码。如果大部分时间都花在运行库代码上,这可能会有很大的不同。否则,(1)仍然适用。


当前回答

静态链接将程序需要的文件包含在一个可执行文件中。

动态链接是你通常会考虑的,它使一个可执行文件仍然需要dll等在同一个目录(或者dll可以在系统文件夹中)。

(动态链接库)

动态链接的可执行文件编译速度更快,资源也不那么繁重。

其他回答

静态链接只给你一个单一的exe,为了做出改变,你需要重新编译你的整个程序。而在动态链接中,您只需要对dll进行更改,当您运行exe时,这些更改将在运行时被拾取。通过动态链接(例如:windows)更容易提供更新和错误修复。

这真的很简单。当您在源代码中进行更改时,您希望等待10分钟或20秒来构建它?我只能忍受20秒。除此之外,我要么拿出剑来,要么开始考虑如何使用单独的编译和链接将其带回舒适区。

动态链接的最佳示例是库依赖于所使用的硬件。在古代,C数学库是动态的,这样每个平台都可以使用所有的处理器功能来优化它。

一个更好的例子可能是OpenGL。OpenGl是一个由AMD和NVidia实现的不同的API。你不能在AMD卡上使用NVidia实现,因为硬件是不同的。因此,你不能静态地将OpenGL链接到你的程序中。这里使用了动态链接,以便为所有平台优化API。

动态链接是满足某些许可要求(如LGPL)的唯一实用方法。

在类unix系统上,动态链接会使“root”很难使用安装在偏僻位置的共享库的应用程序。这是因为对于具有根权限的进程,动态连接器通常不会注意LD_LIBRARY_PATH或其等效内容。有时,静态链接可以解决问题。

另外,安装过程必须确定库的位置,但这可能会使计算机上的多个软件版本难以共存。