zoukankan      html  css  js  c++  java
  • 【转】跨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

  • 相关阅读:
    对象
    语句
    表达式和运算符
    类型、值和变量
    词法结构
    javac命令详解(下)
    javac命令详解(上)
    jar 查找多jar包中类的办法
    find -exec
    java编译相关问题总结
  • 原文地址:https://www.cnblogs.com/timeObjserver/p/9442609.html
Copyright © 2011-2022 走看看