欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

【转】跨DLLnew delete问题

发布时间:2025/3/18 27 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【转】跨DLLnew delete问题 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

【转】跨DLLnew delete问题

转两篇文章来说这个问题的

链接1:https://blog.csdn.net/notebook2001a/article/details/6647850

链接2:https://blog.csdn.net/zj510/article/details/35290505  这篇文章疑点很多,有时间再细究,特别是下面这段

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

根本原因

假设DLL是静态link crt (MT),EXE是动态link (MD)。我画了个示意图。

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

个人理解:

动态链接与静态链接
静态链接:此时静态库就像一个obj文件一样被缝合进了EXE
试想若每个程序都把系统的库静态链接入自己中,N个程序将复制N份系统库,运行时将重复大量的内存
而动态链接库则是共享库只加载一份到内存中,各程序共同使用它。
因为每个进程都有自己的虚拟空间,这个空间就是CPU的寻址范围,32位CPU,寻址能力是4GB,
就是说32位CPU上,每个进程的虚拟内存都是4GB
那么,由于动态链接库不是缝合到EXE中的,因此也不能映射到EXE的进程中,
故,动态链接库加载到内存中时也是有独立的虚拟空间的,
这就引出了一个著名问题:跨链接库 NEW/DELETE的问题,
在一个DLL中用NEW申请内存,在另一个DLL或EXE中 DELETE释放内存可能会出现问题,

 

参考文章:

VS项目属性中C/C++运行库 、MT /MTd /MD /MDd

posted on 2018-08-08 14:33 时空观察者9号 阅读(...) 评论(...) 编辑 收藏

总结

以上是生活随笔为你收集整理的【转】跨DLLnew delete问题的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。