概述
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 Speed | Minimum 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
允许精细调整一个工程的优化
最后
以上就是慈祥鱼为你收集整理的Microsoft Visual Studio C++ 编译器选项设置的全部内容,希望文章能够帮你解决Microsoft Visual Studio C++ 编译器选项设置所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复