【问题标题】:What is "incremental linking"?什么是“增量链接”?
【发布时间】:2011-03-21 22:36:05
【问题描述】:

我查看了 Microsoft 的 MSDN 和整个网络,但我仍然无法真正了解它是什么。

这是否意味着已完成的程序在其执行过程中的不同时间加载 DLL,就像在启动时同时加载一样?

我完全没有办法了吗? :)

【问题讨论】:

标签: incremental-linking


【解决方案1】:

链接涉及将从您的源文件构建的所有 .obj 文件以及您引用的任何 .lib 文件打包到您的输出中(例如 .exe 或 .dll)。

如果没有增量链接,每次都必须从头开始。

增量链接以某种方式链接您的 exe/dll,使链接器在您进行小的更改并重新编译时更容易更新现有的 exe/dll。

因此,增量链接只会让编译和链接项目更快。

它可能具有的唯一运行时影响是它可能会使您的 exe/dll 稍微变大和变慢,如下所述:

http://msdn.microsoft.com/en-us/library/4khtbfyf.aspx

编辑:正如 Logan 所提到的,增量链接也与 link time code generation 不兼容 - 因此失去了可能的性能优化。

您可能希望对调试版本使用增量链接以加快开发速度,但在发布版本时禁用它以提高运行时性能。

延迟加载的 DLL 可能是您所想的:

http://msdn.microsoft.com/en-us/library/151kt790.aspx

【讨论】:

  • 啊,我以为链接器总是这样做!那么,关闭incremental linking 会让链接器每次都从头开始链接吗?
  • "在实践中这样做的影响可能并不值得担心。"可能值得一提的是,虽然“正常”链接和增量链接之间的差异在运行时可能没有那么大的性能,但增量链接与链接时间代码生成不兼容,这会产生巨大的性能差异。
  • @Russel:会的。 @Logan:谢谢,我已经更新了我的答案。
  • 这是否意味着我们应该为生产构建关闭此选项?
  • @RBT,是的,你必须。
【解决方案2】:

另外,非常重要的是,增量链接是Edit&Continue 的先决条件 - 可以编辑您的代码并即时重新编译它,而无需重新启动。

因此,在调试版本上使用是一件好事,而不是在发布版本上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 2020-02-06
    • 2011-05-27
    • 1970-01-01
    • 2010-10-01
    相关资源
    最近更新 更多