在Visual Studio,有的编制旗/MD/MT这让你选择哪种C runtime library你想要的。

我的理解的差异在实现,但我仍然不能确定使用哪一种。有什么优点/缺点?

一个优点/MD,我已经听到,是,这种允许别人更新运行时,(比如修补一个安全问题)以及我的应用程序将受益于这种更新。虽然对我来说,这似乎像一个非功能:我不想让别人改变我的运行时间不允许我来测试新版本!

有些事我很好奇有关:

  • 如何将这种影响建立时间?(据推测/MT是慢一点?)
  • 什么其他影响?
  • 这一做大多数人使用吗?
有帮助吗?

解决方案

通过动态联/MD,

  • 你接触到系统的更新(或好或坏),
  • 你可执行的可能更小的(由于没有库嵌入),
  • 我认为,在很少的代码段的DLL之间共享所有进程的积极使用它(减少的总量RAM消耗).

我还发现,在实践中,工作时,与静态相联系第3-二进制方只库已经建有不同的运行时选项/MT在主要申请往往会造成冲突更往往比/MD(因为你遇到麻烦,如果C运行是静态相联系的多倍,尤其是如果他们不同的版本)。

其他提示

如果您使用的是Dll然后你应该去的动态联CRT(/MD)。

如果您使用的动态CRT。exe和所有。dll然后他们会共用一个单一的执行CRT-这意味着它们将分享一个单一的CRT堆和分配存储器中的一种。exe/.dll 可以释放在另一个。

如果您使用的静态CRT。exe和所有。dll然后他们都会得到一个独立的副本CRT-这意味着他们都会用他们自己的CRT堆所以存储器必须被放在同一个模块中进行分配。你还会遭受码膨胀(多份CRT)和过量的运行开销(每一堆分配存储器操作系统以跟踪其状态,并开销可能是引人注目的).

我认为默认的用于项目建造的通过Visual Studio/MD。

如果你使用/MT,你可执行不依赖于一个DLL存在系统的目标。如果你是这个包裹在一个安装,它可能不会是一个问题,你可以去任何一种方式。

我用/MT自己,所以,我可以忽略的整个DLL的混乱。

P.S.作为 先生Fooz 所指出的,这是至关重要的是一致的。如果你是连接与其他库,需要使用相同的选项他们这样做。如果你利用一个第三方问题,这是几乎可以肯定,你将需要使用DLL的运行时版本的图书馆。

我更喜欢静态链接与/公吨。

即使你得到一个较小的可执行与/MD,你还有船一堆Dll,以确保用户得到正确的版本,为运行程序。在结束你的安装将会大于当联/吨。

什么更糟的是,如果你选择的把你的运行时图书馆的窗户目录,或迟或早的用户正在安装一个新的应用程序有不同的图书馆,并与任何不好的运气,打破你的应用程序。

问题你会遇到与/MD是,目标版本的CRT可能不是在用户机(特别是如果您使用的是最新版的Visual Studio和用户都有一个较早的操作系统)。

在这种情况下你有如何得到正确的版本到他们的机器。

http://msdn.microsoft.com/en-us/library/2kzt1wy3(VS。71).aspx:

/MT定义_MT使多线程的特定版本的运行时间的程序选择标准的标题(.h)的文件。这种选择还会导致编译器的地方图书馆名称LIBCMT.lib入。obj文件,以便连接将用LIBCMT.lib解决外部符号。既/MT/或MD(或他们的"调试"当量/MTd或/MDd)需要创建多线程的程序。

/MD定义_MT和_DLL这样,两个多线程和DLL特定版本的运行时间程序被选定的标准。h文件。这种选择还会导致编译器的地方图书馆名称MSVCRT.lib入。obj文件。

编译的应用程序与这一选项是静态相联系MSVCRT.lib。这个图书馆提供了一层代码,允许连接到解决的外部引用。实际工作的代码载于MSVCR71.DLL必须在运行时可用以应用与MSVCRT.lib。

当/MD用_STATIC_CPPLIB定义(/D_STATIC_CPPLIB)它将导致应用程序的链接,与静多线程的标准C++库(libcpmt.lib),而不是动态的版本(msvcprt.lib),同时仍然动态联系的主要CRT通过msvcrt.lib。

因此,如果我解释是正确的,然后 /MT 链接静 /MD 链接的动态。

如果你是构建可执行的,使用其他dll或库比/MD选择是优选的,因为这样,所有的部件将分享相同的图书馆。当然,这种选择应该符合所有模块涉及我.e dll/lib/exe。

如果你可执行不使用任何lib或dll于它的任何人的电话。差不是太大,因为现在的共享方面是不发挥作用。

所以也许你就可以开始应用程序/MT因为没有令人信服的理由,否则,但是,当其时间增加一个lib或dll,你可以改变它/MD与lib/dll其是容易的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top