MD和MT混用的后果

本文涉及的产品
文本翻译,文本翻译 100万字符
语种识别,语种识别 100万字符
图片翻译,图片翻译 100张
简介: MD和MT混用的后果

dll操作stl对象时(如:std::stringstd::vector)崩溃,原因:在不同堆中申请、释放内存。如果一个dllstl为主要类库,这种情况必定发生。主要分如下几类:

1,导出函数出参使用了stl对象。

2,导出了类,此类有公有成员。可以通过笨办法解决,不设置公有变量,通过SetGet函数操作成员,工作量巨大。

 

1VC6 Debug测试崩溃的情况。

被调用方(dll)

调用方(exe)

是否崩溃

MDd

MDd

正常

MD

正常

MTd

崩溃

MT

崩溃

MD

MDd

正常

MD

MD

正常

MD

MTd

崩溃

MD

MT

崩溃

MTd

MTd

崩溃

Mt

崩溃

MDd

崩溃

MD

崩溃

MT

MTd

崩溃

Mt

崩溃

MDd

崩溃

MD

崩溃

结论:除了双方都是MDMDd,必定崩溃。

 

2VC6 Release版,不考虑MDdMTd

被调用方(dll)

调用方(exe)

是否崩溃

MD

MD

正常

MT

MD

正常

MD

MT

正常

MT

MT

正常

结论:双方都是Release版,不会崩溃。

 

3,开发环境VC6,被调用方Release版,调用方Debug版。

这种情况很常见,比如:使用第三方组件,第三方组件往往没Debug版,所以调试时,只能用Release版。

被调用方(dll)

调用方(exe)

是否崩溃

MD

MTd

崩溃

MDd,

崩溃

MT

MTd

崩溃

MDd

崩溃

结论:必定崩溃。

 

4,VC8(VS2005)Debug

被调用方(dll)

调用方(exe)

是否崩溃

MDd

MDd

正常

MDd

MTd

崩溃

MTd

MTd

崩溃

MTd

MDd

崩溃

5,VC8(VS2005)Release

被调用方(dll)

调用方(exe)

是否崩溃

MT

MT

崩溃

MT

MD

崩溃

MD

MT

崩溃

MD

MD

正常

6VC8(VS2005)被调用方Release,调用方Debug

被调用方(dll)

调用方(exe)

是否崩溃

MD

MD

崩溃

无需实验

 

终上所述:

Debug版都是MDdRelease版都是MD,才不会崩溃。


相关文章
|
3月前
|
存储 缓存 算法
大文件 MD5 SHA 校验时间优化之路
【8月更文挑战第12天】处理大文件的MD5与SHA校验时,可通过选择高效算法实现、分块读取处理文件、利用多线程并行处理、采用硬件加速及缓存校验结果等方式优化校验时间。例如,使用性能良好的加密库如`pycryptodome`替代Python的标准`hashlib`库;分块读取文件并逐块计算哈希值,减少内存占用;利用多线程处理不同文件块;若条件允许,使用硬件加速如Intel AES-NI指令集;以及缓存重复校验的文件哈希值避免重算。这些策略可显著提高校验速度和系统效率。
162 1
|
3月前
|
安全 Linux 网络安全
在Linux中,什么是双因素认证(2FA)?
在Linux中,什么是双因素认证(2FA)?
MD5值对比辨别文件是否改动
去年自己写了一个对比MD5值以此来辨别文件是否被改动,UI和代码有点拉,初学者
78 0
|
6月前
|
数据安全/隐私保护
|
算法
Qt实现一个重复文件检测小工具(原理:通过md5校验)
Qt实现一个重复文件检测小工具(原理:通过md5校验)
298 0
|
C++
[C/C++]基础 %md,%0md是什么意思
[C/C++]基础 %md,%0md是什么意思
139 0
|
数据安全/隐私保护
如何解决MD5后只有31位的坑
如何解决MD5后只有31位的坑
369 0
|
存储 算法 安全
浅析MD5及其用途
简介 MD5(Message-Digest Algorithm,对应的中文名为消息摘要算法)是计算机安全领域广泛使用的散列函数(又称哈希算法、摘要算法),可以产生出一个128位(16字节)的散列值(hash value),主要用来确保信息(message)传输完整和一致。常见的应用场景有密码保护、下载文件校验等。
|
安全
通过MD5校验游戏安装文件完整性实例演示,MD5校验工具Hash使用演示
通过MD5校验游戏安装文件完整性实例演示,MD5校验工具Hash使用演示
917 0
通过MD5校验游戏安装文件完整性实例演示,MD5校验工具Hash使用演示