为什么游戏引擎比动态链接库更喜欢静态库

时间:2010-04-27 15:26:14

标签: c++ c visual-studio-2008 visual-c++

我一直在读几本游戏书。他们总是喜欢通过动态链接创建引擎作为静态库。我是c ++的新手,所以当谈到静态库和动态链接库时,我并不是很了解。我所知道的是静态库增加了程序的大小,在你的程序中需要加载DLL链接库。

[编辑]

我玩过游戏,几乎看起来他们使用DLL来加载声音,灯光,而不是单独加载。当水平加载。因为你在游戏菜单中不一定需要它。

5 个答案:

答案 0 :(得分:19)

动态链接库需要与位置无关;这可能会导致某些处理器架构的性能效率低下。

静态库可以在程序中包含时进行优化,例如,通过剥离死代码。这可以提高缓存性能。

答案 1 :(得分:7)

通过位置独立,他意味着由于游戏引擎和DLL完全分离,DLL是独立的,不能交织到游戏引擎代码中,而静态链接库允许编译器使用你的游戏进行优化引擎代码和库代码。

例如,假设有一个小函数,编译器认为应该内联(直接复制代替函数调用)。然后使用静态库,编译器将能够内联此代码,因为它知道代码是什么(您在编译时链接)。但是,对于动态库,编译器将无法内联该代码,因为它不知道代码是什么(因为它将在运行时链接)。

答案 2 :(得分:3)

值得一提的另一个经常被忽视的原因是,对于许多游戏而言,你不会运行许多其他东西,并且许多用于游戏的库不会被用于其他你可能使用的东西在游戏的同时运行,因此您不必担心使用共享库可以获得的主要优势之一,即一次只需要加载一个(大部分)库的副本而有些东西可以利用那一个副本。在运行游戏时,您可能只有一个程序想要使用该库运行,因为您可能不会同时运行许多其他程序(特别是其他游戏或3D程序)。

您还开辟了全局/链接时间优化的可能性,这对于共享库来说要困难得多。

答案 3 :(得分:2)

另一个问题涉及静态库和动态库之间的差异:When to use dynamic vs. static libraries

至于为什么他们使用静态库,额外的速度可能是值得的,你可以避免DLL地狱(过去是一个大问题)。如果您希望将程序和库分布在一起,确保收件人具有正确的依赖关系,这也很有用,尽管没有什么能阻止您将DLL与可执行文件一起分发。

答案 4 :(得分:2)

在为控制台开发游戏时,通常不能选择动态链接。如果您想将引擎用于控制台和PC开发,最好避免动态链接。