Microsoft Visual Studio C++ 编译器选项设置

来源:互联网 发布:网络化学 编辑:程序博客网 时间:2024/05/16 09:35
 1、vc ->Project->Setting->C/C++ 的优化选项依赖与Category下拉框:
  • General
     提供了最有效的选择一个一般优化目标的方法,但不允许精细地控制单个优化技术
     在优化选项下有5种选择:Default、Disable(Debug)、Maximize Speed、Minimize Size和Customize。其中Disable关闭所有优化选项,当需要编译器执行一些所关切的更快速代码优化,而清除其他所有优化包括Disable时,可以使用Default。对于函数级连接和字符串假脱机,Customize优化选项提供了对优化开关的手工控制。
General Category的Maximize Speed 和 Minimum Size Settings
优化选项Maximize SpeedMinimum Seize产生内部函数内联
无快速代码优化
无最小代码优化无
全局优化启用
忽略帧指针
堆栈检查关闭
字符串假脱机启用
函数级链接启用
  • Code Generation
     选择针对处理器的优化和一个工程的缺省调用规范。
     
     CodeGeneration 包括用户现在的针对特殊处理器的优化选项、缺省的调用规、应用程序所使用的运行时类库以及成员结构的对其方式。
     选择处理器
          Processor选择指示编译器优化,缺省设置下是Blend表示一种折衷处理。
     选择调用规范
          Visual C++允许三种调用规范:__cdecl、__fastcall、__stdcall。调用规范决定了自左自右或者自右自左的参数传递。由谁负责清除堆栈以及函数名字解释。
          
调用规范传送顺序堆栈清除执行者解释风格__cdecl自右自左调用程序_functionName__fastcall自右自左被调用程序@functionName@nnn__stdcall自右自左被调用程序_functionName@nnn
nnn----表示参数列表中的字节数
      (1) __stdcall调用  
          __stdcall是Pascal程序的缺省调用方式,参数采用从右到左的压栈方式,被调函数自身在返回前清空堆栈。WIN32 Api都采用__stdcall调用方式,这样的宏定义说明了问题: #define WINAPI _stdcall  按C编译方式,__stdcall调用约定在输出函数名前面加下划线,后面加“@”符号和参数的字节数,形如_functionName@nnn。

      (2) __cdecl调用 
          __cdecl是C/C++的缺省调用方式,参数采用从右到左的压栈方式,传送参数的内存栈由调用者维护。__cedcl约定的函数只能被C/C++调用,每一个调用它的函数都包含清空堆栈的代码,所以产生的可执行文件大小会比调用__stdcall函数的大。 由于_cdecl调用方式的参数内存栈由调用者维护,所以变长参数的函数能(也只能)使用这种调用约定。由于Visual C++默认采用__cdecl 调用方式,所以VC中中调用DLL时,用户应使用__stdcall调用约定。按C编译方式,__cdecl调用约定仅在输出函数名前面加下划线,形如_functionName。   

       (3) __fastcall调用  
          __fastcall调用较快,它通过CPU内部寄存器传递参数。(实际上,它用ECX和EDX传送前两个双字(DWORD)或更小的参数,剩下的参数仍旧自右向左压栈传送,被调用的函数在返回前清理传送参数的内存栈),按C编译方式,__fastcall调用约定在输出函数名前面加“@”符号,后面加“@”符号和参数的字节数,形如@@functionName@nnn
     选择运行时库
          参考下这篇文章:http://blog.csdn.net/wangqiulin123456/article/details/8877221
     选择结构对齐方式
  • Customize
     自动选择函数级的连接和字符串假脱机
  • Optimizations
     允许精细调整一个工程的优化

原创粉丝点击