zoukankan      html  css  js  c++  java
  • 如何在MD(d)和MT(d)工程间正确分配和释放动态内存

     

    MD(d)和MT(d)

    MD(d)和MT(d)是windows下VC开发的两个编译选项,表示程序的运行时库编译选项。

    /MT是"multithread, static version" 意思是多线程静态的版本,定义了它后,编译器把LIBCMT.lib安置到OBJ文件中,让链接器使用LIBCMT.lib 处理外部符号。

    /MD是"multithread- and DLL-specific version",意思是多线程DLL版本,定义了它后,编译器把MSVCRT.lib安置到OBJ文件中,它连接到DLL的方式是静态链接,实际上工作的库是MSVCR80.DLL。

    即:

    静态运行时库:LIBCMT.lib

    动态运行时库:MSVCRT.lib +MSVCR80.DLL

    如何选择MD(d)和MT(d)

      MD(d)编译选项编译的程序因为是动态链接运行时库的,所以软件大小较小,但是有时候因为系统没有程序所需要的运行时库版本,所以必须要使用MT(d)编译,这个时候软件占用空间就相对较大。一个解决方案中的不同项目间最好使用相同的编译选项,这样的话就不会出现在静态运行时库上分配的动态内存在静态运行时库上去释放导致的崩溃等问题。

    如何在不同编译选项的模块间正确分配和释放内存

    如果不可避免的在工程中不同模块间同时使用了MD(d)和MT(d),而且需要在不同模块间进行动态内存的分配和释放,这时可以使用:

    HeapAlloc

    HeapFree

    函数进行动态内存的分配和释放,因为这两个函数是在进程内存空间上分配堆内存的,所以不同模块间是共用的一块内存,就不会出现使用new和delete导致的崩溃问题。

    参考文献:

    http://blog.csdn.net/nodeathphoenix/article/details/7550546

  • 相关阅读:
    C\C++\Java字符串拼接比较
    Visual Assist X支持VS2010高亮显示CUDA代码(Windows 7)
    相似字符串(编程之美2013初赛题2)
    linux mdadm raid阵列重建加速bitmaps文件
    Pig Grunt之简单命令及实例说明
    error: device not found解决
    Spring配置文件错误
    Java贪吃蛇游戏(坐标方法)
    java增强型for循环(三种遍历集合方式)
    酸菜鱼的简单做法
  • 原文地址:https://www.cnblogs.com/chenyangchun/p/7474974.html
Copyright © 2011-2022 走看看