Visual Studio--Tips

A.Info

1.多线程MT和多线程MD

多线程MT加载的是静态运行时库,属于C语言版本;
而多线程MD版本加载是动态运行时库,属于微软版本。
在工程属性窗体中选择配置属性,C++选项的代码生成多线程调试 DLL (/MDd)和多线程调试 DLL (/MTd)是Debug版本,后面没有d的是Release版本。

问题1) 选择/MD,不选/MT?

  • 程序就不需要静态链接运行时库,可以减小软件的大小;
  • 所有的模块都采用/MD,使用的是同一个堆,不存在A堆申请,B堆释放的问题;
  • 用户机器可能缺少我们编译时使用的动态运行时库
  • 如果我们软件有多个DLL,采用/MT体积增加太多,则可以考虑/MD + 自带系统运行时库

问题2) 选择/MT,不选择/MD?

  • 有些系统可能没有程序所需要版本的运行时库,程序必须把运行时库静态链接上。
  • 减少模块对外界的依赖。
  • 多个模块,必须选择相同的运行时库。

B.Error

1.std::bad_alloc at memory location 0xxxxxxx

分析1) 在分配内存空间时,内存空间不够时就会抛出该异常。

  • 在程序中加入delete和clear及时释放内存,并且对原始数据进行分割处理。

分析2) 在32位(x86)模式下,程序所能申请的最大内存上限是2GB。

  • 要申请2GB以上的内存,要更改一下项目CPU启动的模式;打开项目的属性页,找到属性配置—链接器—系统,将「使用大地址」一栏选上「是」。