"增量链接"是什么?

123
我查看了微软的MSDN和全网,但仍然没有能够获得一个真正好的想法。
它是否意味着完成的程序在执行过程中在不同时间加载DLL,而不是一次性全部启动?
我完全错了吗? :)

2
我为GNU ld添加了一个答案,但它被删除了,这里有一个类似的:https://dev59.com/-F0b5IYBdhLWcg3wQPbw#53959624 - Ciro Santilli OurBigBook.com
1
它被删除是因为复制、粘贴和分歧是不好的——无论内容有多好。https://en.wikipedia.org/wiki/Don%27t_repeat_yourself - MarcH
2个回答

132

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

如果没有增量链接,则每次都必须从头开始执行此操作。

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

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

它可能会产生唯一的运行时影响,即它可能使您的 exe/dll 稍微变大且变慢,如此处所述:

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

编辑:如 Logan 所提到的,增量链接也与 链接时间代码生成 不兼容 - 因此失去了可能的性能优化。

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

延迟加载的 DLL 可能是您想要的内容:

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


啊,我以为链接器总是这样做的!那么,关闭“增量链接”会使链接器每次都从头开始链接所有内容吗? - Russel
7
实际上,这个影响可能不值得担心。值得一提的是,在运行时,“普通”链接和增量链接之间的差别可能不会很大,但增量链接与链接时间代码生成不兼容,这可能会导致性能差异很大。 - Logan Capaldo
那么这是否意味着我们应该在生产构建中关闭此选项? - RBT
1
@RBT,是的,你必须这样做。 - Ajay

17

此外,增量链接是Edit&Continue的先决条件——可以在不重新启动的情况下即时编辑和重新编译代码。

因此,在调试构建中具有增量链接是一件好事,但在发布构建中则没有必要。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接