3 回答
TA贡献1807条经验 获得超9个赞
通过与/ MD动态链接,
您接触到系统更新(无论是好是坏),
您的可执行文件可以更小(因为它没有嵌入库),并且
我认为,至少DLL的代码段在所有正在使用它的进程之间共享(减少了所消耗的RAM总量)。
我还发现,在实践中,当使用通过不同的运行时选项构建的静态链接的仅第三方的二进制二进制库时,主应用程序中的/ MT往往比/ MD引起冲突的频率更高(因为如果C运行时多次被静态链接,尤其是当它们是不同的版本时,将会遇到麻烦。
TA贡献1906条经验 获得超10个赞
如果使用的是DLL,则应使用动态链接的CRT(/ MD)。
如果为.exe和所有.dll使用动态CRT,则它们将共享一个CRT的单一实现-这意味着它们将共享一个CRT堆,并且可以在一个.exe / .dll中释放分配的内存另一个。
如果您为.exe和所有.dll使用静态CRT,则它们都将获得CRT的单独副本-这意味着它们都将使用自己的CRT堆,因此必须在与之相同的模块中释放内存已分配。您还将遭受代码膨胀(CRT的多个副本)和额外的运行时开销(每个堆从OS分配内存以跟踪其状态的开销,开销是显而易见的)。
TA贡献1884条经验 获得超4个赞
我相信通过Visual Studio构建的项目的默认值为/ MD。
如果使用/ MT,则可执行文件将不依赖于目标系统上存在的DLL。如果将其包装在安装程序中,则可能不会有问题,您可以选择其中一种。
我自己使用/ MT,因此可以忽略整个DLL混乱。
PS正如Fooz先生所指出的,保持一致至关重要。如果要链接其他库,则需要使用与它们相同的选项。如果您使用的是第三方DLL,那么几乎可以肯定,您将需要使用运行时库的DLL版本。
- 3 回答
- 0 关注
- 822 浏览
添加回答
举报