为什么使用链接器选项/ DYNAMICBASE加速我的应用程序?

时间:2012-10-09 18:30:50

标签: visual-c++ linker

我目前使用一个简单的应用程序进行速度测量,在此过程中,我注意到当我告诉链接器使用/ DYNAMICBASE时,运行时间缩短约1.5%。

我同意1.5%在测量过程中很容易出错,但实际上我使用/ DYNAMICBASE进行了超过15次运行,使用/ DYNAMICBASE进行了15次运行:否,每次运行大约需要5分钟。甚至不是最快的/ DYNAMICBASE:NO运行速度比最慢/ DYNAMICBASE运行速度快......

1 个答案:

答案 0 :(得分:0)

如果您的解决方案直接或间接使用了许多DLL - / DYNAMICBASE可以减轻Windows加载器的负担,尤其是在应用于依赖DLL时。当使用的二进制文件被加载并放入进程地址空间时,如果它们的默认基地址范围发生冲突 - Windows加载程序必须 rebase 它们,即决定一个新的基地址并遍历DLL全局符号调用(数据或功能)并将它们更改为新地址。对于许多(或非常大)的DLL,这在启动时间上可以忽略不计。

如果从调试器运行,可以在“模块”窗口中查看加载的二进制文件,并检查左侧的图标以确定模块是否经历了变基础:

Modules window

如果你看到很多DLL避免使用/ DYNAMICBASE进行重新定位,这可能就是原因。你可以(并且原则上应该)用/ BASE直接控制基地址,而不是把这个好处留给机会。