在一个进程中混合和匹配vc ++运行时DLL有多糟糕? [英] How bad is it to mix and match vc++ runtime dlls in one process?

查看:148
本文介绍了在一个进程中混合和匹配vc ++运行时DLL有多糟糕?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个使用visual studio 2012构建的应用程序,因此取决于 MSVCP110.DLL MSVCR110.DLL 。我正在使用另一个dll,这似乎是用visual studio 2010构建的,并且取决于 MSVCP100.DLL MSVCR100.DLL 。还有一个DLL是用visual studio 2008构建的,取决于 MSVCR90.DLL



这是一个坏的事情?真是坏事吗我应该担心吗我问的原因是运行时堆分配器抱怨堆损坏。这可能与混合的运行时版本有关吗?

解决方案

主要是从不同的编译器版本混合和匹配Visual Studio运行时是不安全的因为每个运行时都会创建自己的独立堆。由于堆将完全独立,因此无法使用1堆分配内存,并将其释放到不同的堆中。这样做会腐败你的堆。腐败通常不会导致立即崩溃,因为在接下来的几个分配或释放中可能无法访问堆的损坏部分,因此可能很难调试。



对于具有与应用程序不同的堆的单个DLL的情况,可以以非常有限的方式解决问题。你必须隔离dll,以便dll的所有分配和释放都只在DLL的内部。而且隔离也必须走另一种方式。 dll将无法安全地从应用程序中释放内存,而无需隔离。



可以在这里找到更多关于混合CRT版本造成的堆损坏的信息:
http://siomsystems.com/mixing-visual-studio-versions/


I have an application that is built with visual studio 2012, and thus depends on MSVCP110.DLL and MSVCR110.DLL. I'm using another dll, which seems to have been built with visual studio 2010, and depends on MSVCP100.DLL and MSVCR100.DLL. Yet another DLL I have was build with visual studio 2008 and depends on MSVCR90.DLL.

Is this a bad thing? A really bad thing? Should I be worried? The reason I ask is that the runtime heap allocator is complaining about heap corruption. Could this be related to the mixed runtime versions?

解决方案

It's not safe to mix and match Visual Studio runtimes from different compiler versions mainly because each runtime will create its own independent heap. Since the heaps will be totally independent you can not allocate memory using 1 heap and free it in a different heap. Doing so will corrupt your heaps. The corruption does not usually cause an immediate crash since the corrupt part of the heap may not be accessed on the next few allocations or deallocations so it can be very hard to debug.

For the case of a single dll having a different heap than the application it is possible to work around the problem in a very limited way. You would have to isolate the dll such that all allocations and deallocations of dll happens only inside of the dll. And also isolation would have to go the other way as well. The dll will not be able to safely free memory from the applicaton without isolation.

More info on heap corruption caused by mixing CRT versions can be found here: http://siomsystems.com/mixing-visual-studio-versions/

这篇关于在一个进程中混合和匹配vc ++运行时DLL有多糟糕?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆