什么是“增量链接”?


105

我已经看过Microsoft的MSDN和整个Web,但是我仍然无法真正了解它的含义。

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

我完全离开吗?:)


1
我增加了GNU ld的一个答案,但它已被删除,这里是一个类似:stackoverflow.com/questions/29391965/...
西罗桑蒂利郝海东冠状病六四事件法轮功

它被删除是因为“复制,粘贴和分散”是不好的-不管内容多么好en.wikipedia.org/wiki/Don%27t_repeat_yourself
MarcH

Answers:


122

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

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

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

因此,增量链接只会加快编译和链接项目的速度。

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

http://msdn.microsoft.com/zh-CN/library/4khtbfyf.aspx

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

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

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

http://msdn.microsoft.com/zh-CN/library/151kt790.aspx


啊,我以为链接器总是这样做!那么,关闭incremental linking将使链接器每次都从头开始链接所有内容吗?
罗素

6
“实际上,这种效果可能不值得担心。” 可能值得一提的是,尽管“正常”链接和增量链接之间的区别可能不是运行时的出色性能,但增量链接与链接时间代码生成不兼容,这可能会产生巨大的性能差异。
洛根·卡帕尔多

2
@罗素:是的。@Logan:谢谢,我已经更新了答案。
撒克逊人Druce 2010年

那么这是否意味着我们应该为生产构建关闭此选项?
RBT

1
@RBT,是的,您必须。
阿贾伊

15

同样,非常重要的是,增量链接是前提Edit&Continue-可以编辑代码并即时进行编译,而无需重新启动。

因此,拥有调试版本是一件好事,而不是发布版本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.