/MD 与 /MT、/MTD与/MDD的区别
来源:互联网 发布:网站美工是做什么的 编辑:程序博客网 时间:2024/05/01 17:24
VS在 属性页的 C/C++ -> Code Generation -> Runtime Library 一项中总共有四个选项 /MD 与 /MT、/MTD与/MDD,它们分别有什么区别?
1、/MD 与 /MT 用于Release 版本,前者表示链接时,不链接VC的运行时库(msvcrt.lib),而采用动态库(msvcrtXX.dll,其中XX表示使用的版本);相应地,后者则表示静态链接VC的运行时库,这样的结果是链接生成的的目标模块体积明显比前者要大一些。
2、/MTD与/MDD 用于Debug版本,其它规则同上。
3、除了在是动、静态链接VC运行时库上有区别,另外的区别点在于,采用静态链接的方式将导致生成的目标模块拥有独立的堆栈空间,如果生成的是DLL,那意味着调用该DLL的EXE程序与该DLL有着不同的堆栈空间,如果发生了EXE拿到了在DLL中分配内存创建的对象,在EXE对其进行析构时,就会导致内存非法访问,出现类似于“windows已在XX.exe中触发一个断点……”的错误。所以,尽量不要使用 /MT与/MTD进行静态运行时库链接的方式,即使要使用,也一定要遵循“谁申请,谁释放”的原则。但是该原则在使用类时很难遵循,因为类中可能会有申请内存的动作。
4、采用第1点静态链接时,如果生成的模块拿给别人使用,别人若使用了不同版本的编译器,则会在链接时产生一系列问题,比如经常需要手动忽略 msvcrt.lib这个库。具体会导致的问题此处不做研究。
5、以上第3点系网上查阅得知,未经验证,需要通过阅读《核心编程》来验证该问题。
6、另外,多模块程序的内存空间很值得推敲研究。但Linux下貌似不存在这些问题。
---------------------------------------------------------------------------------
参考链接
http://www.cnblogs.com/minggoddess/archive/2010/12/15/1907179.html
http://www.cnblogs.com/cswuyg/archive/2012/02/03/2336424.html
1 0
- /MD 与 /MT、/MTD与/MDD的区别
- /MT /MTd /MD /MDd的区别
- VC运行时库MD,MT,MTD,MDD的区别
- VC编译时: MT,MTd,MD,MDd的区别
- /MD /MDd /MT /MTd
- MT、MTd、MD、MDd
- /mt /mtd md /mdd
- MT MTd MD MDd
- md /mdd /ml /mt/mtd
- md /mdd /ml /mt/mtd
- /MD、MDd 和 /MT、MTd
- md /mdd /ml /mt/mtd
- MD /MDd /ML /MT/MTd
- md /mdd /ml /mt/mtd
- md /mdd /ml /mt/mtd
- md /mdd /ml /mt/mtd
- md /mdd /ml /mt/mtd
- md /mdd /ml /mt/mtd
- 介绍几本专业的书籍,一起学习 关于技术 数学方面的
- DesignBuilder.Software.Ltd.DesignBuilder.v4.2.0.054 1CD建筑能耗动态模拟程序
- HashMap解决hash冲突的方法
- 在MyEclipse上创建SSH项目
- Sumsets(4sum问题)
- /MD 与 /MT、/MTD与/MDD的区别
- 自由软件、开源软件、免费软件、共享软件和商业软件
- KESZ.ConSteel.csJoint.v9.0.004 2CD
- jsp+servlet小练习
- UI基础:UILabel.UIFont
- Kinect v2.0原理介绍之一:硬件结构
- gitHub-初识
- Android MVC 实例
- 《数据结构与算法分析C++》 维斯 第一章 笔记