C++ 静态链接是否比本地代码慢

C++ 静态链接是否比本地代码慢,c++,static-linking,C++,Static Linking,我正在写一些统计软件(C++),其中速度是最重要的;其次是可维护性 另外,我还编写了一个静态库,它将我日常使用的算法集合捆绑在一起。我的许多程序都使用这个库,因此独立维护这些算法对我来说是完美的。新的统计软件也使用这个库 在调试新软件时,我注释掉了对库中一些简单(计算)函数的一些调用。由于省略通话而导致的速度增加似乎不成比例-提出了这个问题: Q.除了在本地编译相同代码会导致的执行时间惩罚外,调用静态链接代码是否会导致执行时间惩罚 注意-这很难搜索。我所有的互联网搜索结果都是静态链接和动态链接的

我正在写一些统计软件(C++),其中速度是最重要的;其次是可维护性

另外,我还编写了一个静态库,它将我日常使用的算法集合捆绑在一起。我的许多程序都使用这个库,因此独立维护这些算法对我来说是完美的。新的统计软件也使用这个库


在调试新软件时,我注释掉了对库中一些简单(计算)函数的一些调用。由于省略通话而导致的速度增加似乎不成比例-提出了这个问题:

Q.除了在本地编译相同代码会导致的执行时间惩罚外,调用静态链接代码是否会导致执行时间惩罚

注意-这很难搜索。我所有的互联网搜索结果都是静态链接和动态链接的比较——这与我的研究无关


编辑-测试是在发布版本(非调试)中进行的。

否。链接静态库等同于链接组成库的目标文件。无论是从静态库中链接代码,还是将源代码复制粘贴到构建为本地.o文件的文件中,在编译/链接时和运行时都应该没有明显的区别


速度上的任何差异都应该仅来自代码更改(尽管如果使用LTO(链路时间优化),可能需要注意一点).

否。链接静态库等同于链接组成库的目标文件。无论是在编译/链接时还是在运行时,无论是从静态库链接代码,还是将源文件复制粘贴到随后生成为本地.o文件的文件,都不应有明显的区别


速度上的任何差异都只应来自代码更改(尽管如果您使用LTO(链接时间优化)可能需要注意)。

“调试新软件时…”您不是从调试版本推断性能,是吗?性能:发布版本(优化)我不明白为什么会有什么不同——在这两种情况下,它都链接到同一个可执行文件中。我只能建议进行分析。@RichardCriten没有。这是一个很好的问题。我应该说清楚,我的测试都在发布版本中。配置与我分发时使用的配置相同。“导致的速度提高”-您是如何衡量的?@Mawg软件定时器内置于代码中。“调试新软件时…”您不是从调试版本推断性能,是吗?性能:发布版本(优化)我不明白为什么会有什么不同——在这两种情况下,它都链接到同一个可执行文件中。我只能建议进行分析。@RichardCriten没有。这是一个很好的问题。我应该说清楚,我的测试都在发布版本中。配置与我分发时使用的配置相同。”导致的速度提高“-你是如何衡量的?”代码中内置了@Mawg软件计时器。这是我的假设,因此我很高兴得到确认。不过,你的最后一句话引起了一点怀疑。可能是链接器(或编译器)吗如果所有代码都一起构建,优化效果会更好吗?发布版本中的链接时间优化不是很常见吗?@Blair Fonville是的,它有时可以更好地优化,但LTO通常需要显式启用。我使用VS-2012实现此目的。优化设置为“使用链接时间代码生成(/LTCG)”“。我得看看是否能找到一些相关信息。谢谢你的回答。这是我假设的,所以我很高兴得到确认。不过,你的最后一句话引起了一点怀疑。可能是链接器(或编译器)吗?”如果所有代码一起构建,优化效果会更好吗?链接时间优化在发布版本中不是很常见吗?@Blair Fonville是的,它有时可以更好地优化,但LTO通常需要显式启用。我使用VS-2012实现此目的。优化设置为“使用链接时间代码生成(/LTCG)”.我得看看能不能找到一些这方面的信息.谢谢你的回答。