VS 编译时 /MD 与 /MT、/MTD与/MDD的区别

news/2024/12/3 7:01:12/

VS在 属性页的 C/C++ -> Code Generation -> Runtime Library 一项中总共有四个选项 /MD 与 /MT、/MTD与/MDD,它们分别有什么区别?

1、/MD 与 /MT 用于Release 版本,前者表示链接时,不链接VC的运行时库(msvcrt.lib),而采用动态库(msvcrtXX.dll,其中XX表示使用的版本);相应地,后者则表示静态链接VC的运行时库,这样的结果是链接生成的的目标模块体积明显比前者要大一些。

2、/MDD与/MTD 用于Debug版本,其它规则同上。

3、除了在是动、静态链接VC运行时库上有区别,另外的区别点在于,采用静态链接的方式将导致生成的目标模块拥有独立的堆栈空间,如果生成的是DLL,那意味着调用该DLL的EXE程序与该DLL有着不同的堆栈空间,如果发生了EXE拿到了在DLL中分配内存创建的对象,在EXE对其进行析构时,就会导致内存非法访问,出现类似于“ windows已在XX.exe中触发一个断点…… ”的错误。所以,尽量不要使用 /MT与/MTD进行静态运行时库链接的方式,即使要使用,也一定要遵循“谁申请,谁释放”的原则。但是该原则在使用类时很难遵循,因为类中可能会有申请内存的动作。

4、采用第1点静态链接时,如果生成的模块拿给别人使用,别人若使用了不同版本的编译器,则会在链接时产生一系列问题,比如经常需要手动忽略 msvcrt.lib这个库。具体会导致的问题此处不做研究。

5、以上第3点系网上查阅得知,未经验证,需要通过阅读《核心编程》来验证该问题。

6、另外,多模块程序的内存空间很值得推敲研究。但Linux下貌似不存在这些问题。

---------------------------------------------------------------------------------

参考链接

动态链接库中分配内存引起的问题-- windows已在XX.exe中触发一个断点 - minggoddess - 博客园

/MT、/MD编译选项,以及可能引起在不同堆中申请、释放内存的问题 - 烛秋 - 博客园


http://www.ppmy.cn/news/188835.html

相关文章

md文件如何打开?

阅读md文件时 常常会手足无措 今天教大家如何打开md文件 当在阅览md文件时,一般系统默认是记事本: 阅览效果极其不佳且编辑体验极差! 今天推荐一款软件:Typora 直接上链接:下载地址(官网) …

md /mdd /ml /mt/mtd

from : http://www.cnblogs.com/jinianjun/archive/2012/03/28/2420502.html VC编译选项: 多线程(/MT) 多线程调试(/MTd) 多线程 DLL (/MD) 多线程调试 DLL (/MDd) C 运行时库库文件Single thread(static link) MLlibc.libDebug single thread(static …

md01 与md02的区别

MD01和MD02对同一个物料运行结果不一致原因 执行MD01 需要表mdvm(MRP文件中的条目)的数据支持,mdvm中没有的条目的物料将不能执行总计划。具体是无法执行FORM SELECT_MDVM_FOR_MRP,也就无法产生计划结果。在一个MRP已经激活的工厂…

什么是M2Det

M2Det: A Single-Shot Object Detector based on Multi-Level Feature Pyramid Network 本文的目标是构建更加高效的特征金字塔,以提高不同尺寸目标的检测准确率。 特征金字塔被广泛应用于目标检测中(one-stage的DSSD、RetinaNet、RefineDet和two-stage的Mask R-C…

MATLAB实现寻找信号中的峰值和谷值

一、峰值检测函数 1.findpeaks函数 (1)函数调用: (2)范例: clear all; clc; close all; yload(ffpulse.txt); % 读入脉搏数据 xdetrend(y); % 消除趋势项 fs200; …

md文件使用介绍

凌云之翼 写的一篇图文混合介绍 https://www.cnblogs.com/liugang-vip/p/6337580.html

(Mysql)Navicat如何导出Excel格式表结构

一、点击navicat查询(新建) 二、把如下查询sql语句复制粘贴进去,修改对应的数据库名称和表名称 SELECTCOLUMN_NAME 列名,COLUMN_TYPE 数据类型,DATA_TYPE 字段类型,CHARACTER_MAXIMUM_LENGTH 长度,IS_NULLABLE 是否为空,COLUMN_DEFAULT 默认…

MDT概念说明

转自:http://www.winos.cn/html/21/t-39621.html http://hi.baidu.com/popweb/item/95ea6cf3aea966b530c19958 1、Information Center:该节点包含整个MDT 2008的相关信息(不过都是英文大家感兴趣的花可以看下)。①Getting Started:使用向导的相关信息。②Document…