代码生成:
启用字符串池:容许编译器在执行过程当中,在程序影像和内存中建立相同字符串的单个只读副本,从而生成较小的程序。
启用最小从新生成:
在首次编译期间,编译器在项目的.idb文件中存储源文件和类定义之间的依赖关系信息。 (依赖关系信息代表每一个源文件所依赖的类定义以及该定义位于哪一个.h 文件中。)后面的编译使用存储在.idb 文件中的信息肯定是否须要编译某个源文件(即便它包含已修改的 .h 文件)。
最小从新生成依赖于类定义不会在包含文件之间更改。类定义对于项目必须是全局的(对于给定类应只有一个定义),由于.idb 文件中的依赖关系信息是为整个项目建立的。若是项目中的某个类有多个定义,请禁用最小从新生成。
因为增量连接器不支持经过使用 /ZW(Windows 运行时编译) 选项将 Windows 元数据包含在 .obj 文件中,所以 /Gm 选项与 /ZW 不兼容。
启用C++异常:/EH{s|a}[c][r][-]
a
同时捕获异步(结构化)和同步 (C++) 异常的异常处理模型。
s
仅捕获 C++ 异常并通知编译器假定声明为 extern "C" 的函数可能引起异常的异常处理模型。
c
若是与 s (/EHsc) 一块儿使用,则仅捕获 C++ 异常并通知编译器假定声明为 extern "C" 的函数从未引起 C++ 异常。
/EHca 与 /EHa 相等。
r
告知编译器始终为全部 noexcept 函数生成运行时终止检查。 默认状况下,若是编译器肯定该函数仅调用非引起函数,则运行时检查 noexcept 可能被优化掉。
较小类型检查:启动或禁用运行时检测功能
基本运行时检测:
运行库:
/MD[d]
/ML[d]
/MT[d]
/LD[d]
选项
说明
/MD 定义_MT和_DLL以便同时从标准.h文件中选择运行时例程的多线程特定版本和 DLL 特定版本。
此选项还使编译器将库名 MSVCRT.lib 放入 .obj 文件中。
用此选项编译的应用程序静态连接到 MSVCRT.lib。该库提供容许连接器解析外部引用的代码层。
实际工做代码包含在 MSVCR71.DLL 中,该库必须在运行时对于与 MSVCRT.lib 连接的应用程序可用。
/MDd
定义 _DEBUG、_MT 和 _DLL,以便从标准 .h 文件中选择运行时例程的调试多线程特定版本和 DLL 特定版本。
它还使编译器将库名 MSVCRTD.lib 放入 .obj 文件中。
/ML
使编译器将库名 LIBC.lib 放入 .obj 文件中,以便连接器使用 LIBC.lib 解析外部符号。
这是编译器的默认操做。LIBC.lib 不提供多线程支持。
/MLd
定义 _DEBUG 并使编译器将库名 LIBCD.lib 放入 .obj 文件中,以便连接器使用 LIBCD.lib 解析外部符号。
LIBCD.lib 不提供多线程支持。
/MT
定义 _MT,以便从标准头 (.h) 文件中选择运行时例程的多线程特定版本。
此选项还使编译器将库名 LIBCMT.lib 放入 .obj 文件中,以便连接器使用 LIBCMT.lib 解析外部符号。
建立多线程程序须要 /MT 或 /MD(或它们的调试等效选项 /MTd 或 /MDd)。
/MTd
定义 _DEBUG 和 _MT。定义 _MT 会致使从标准 .h 文件中选择运行时例程的多线程特定版本。
此选项还使编译器将库名 LIBCMTD.lib 放入 .obj 文件中,以便连接器使用 LIBCMTD.lib 解析外部符号。
建立多线程程序须要 /MTd 或 /MDd(或它们的非调试等效选项 /MT 或 MD)。
/LD
建立 DLL。将 /DLL 选项传递到连接器。连接器查找 DllMain 函数,但并不须要该函数。
若是没有编写 DllMain 函数,连接器将插入返回 TRUE 的 DllMain 函数。
连接 DLL 启动代码。
若是命令行上未指定导出 (.exp) 文件,则建立导入库 (.lib);将导入库连接到调用您的 DLL 的应用程序。
将 /Fe 解释为命名 DLL 而不是 .exe 文件;默认程序名成为基名称.dll 而不是基名称.exe。
若是还未显式指定 /M 选项之一,则将默认运行时库支持更改成 /MT。
/LDd
建立调试 DLL。定义 _DEBUG。
结构成员对齐 /Zp[1|2|4|8|16]
当指定此选项时,第一个结构成员后的每一个结构成员将存储在成员类型大小或 n 字节边界(其中 n 为 一、二、四、8 或 16)二者中较小的一个边界上。
下表描述了可用的值。
1针对 1 字节边界将结构打包。 与 /Zp 相同。
2针对 2 字节边界将结构打包。
4针对 4 字节边界将结构打包。
8针对 8 字节边界将结构打包(默认设置)。
16针对 16 字节边界将结构打包。
除非有特定的对齐要求,不然不该使用此选项。
安全检查 /GS[-]
默认状况下,/GS 处于打开状态。 若是但愿应用程序不出现安全漏洞,请使用 /GS-。
启用函数级连接 /Gy[-]
连接器要求单独打包为 COMDAT 的函数在 DLL 或 .exe 文件中排除或安排各个函数。
可使用连接器选项 /OPT(优化) 从 .exe 文件中排除未引用的封装函数。
可使用连接器选项 /ORDER(按顺序放置函数)按指定顺序将封装函数包括在 .exe 文件中。
若是内联函数做为调用进行实例化(例如,当关闭内联或获取函数地址时出现这种状况),则始终打包内联函数。 另外,在类声明内部定义的 C++ 成员函数会自动打包;其余函数不会如此,因此须要选择此选项以便将它们做为封装函数编译。
用于“编辑并继续”的 /ZI 选项会自动设置 /Gy 选项。
启用并行代码生成
当编译器自动对循环进行并行化代码,它在多个处理器内核之间分布的计算。 循环并行化仅当编译器肯定它是以合法的方式执行,而且并行化会提升性能。
启用加强指令集
根据具体硬件的特性选择对应的CPU指令集,能够最优化速度。
浮点模型 /fp:[precise | except[-] | fast | strict ]
经过禁用可更改浮点计算精度的优化,可提升等式和不等式的浮点测试的一致性。
启用浮点异常
可靠的浮点异常模型。 异常在触发后当即引起。 默认状况下关闭此选项。 将减号追加到此选项将显式禁用它。
建立可热修补映像 /hotpatch
当 /hotpatch 用于编译时,编译器确保每一个函数的第一个指令为至少两个字节,这是热修补的要求。安全
===============================================================================
语言

禁用语言扩展 /Za Visual C++ 编译器提供许多在 ANSI C 或 ANSI C++ 标准中指定的那些功能之外的功能。 这些功能统称为 C 和 C++ 的 Microsoft 扩展。 这些扩展在指定 /Za 选项时不可用。 若是打算将程序移植到其余环境,请禁用语言扩展。 将WChar_t视为内置类型 /Zc:wchar_t[-] 若是 /Zc:wchar_t 处于打开状态,wchar_t 将映射到 Microsoft 专用本机类型 __wchar_t。 若是指定了 /Zc:wchar_t-(带有一个减号),wchar_t 将映射到 unsigned short 的 typedef。 C++ 标准要求 wchar_t 是内置类型。 强制For循环范围中的合规性 /Zc:forScope[-] 就是决定变量在超出for循环以后,是否还存在 启用运行时类型信息 /GR[-] 当 /GR 启用时,编译器将定义 _CPPRTTI 预处理器宏。 默认状况下,/GR 处于打开状态。 /GR- 将禁用运行时类型信息。 若是编译器没法在代码中静态解析对象类型,则使用 /GR。 当代码使用 dynamic_cast 运算符 或 typeid 时,一般须要 /GR 选项。 可是,/GR 会致使映像的 .rdata 节增大。 若是您的代码不使用 dynamic_cast 或 typeid,则使用 /GR- 可能会生成较小的映像。 OpenMP支持 #pragma omp 用于指定 Directives 和 Clauses。 若是未在编译中指定 /openmp,编译器将忽略 OpenMP 子句和指令。 即便未指定 /openmp,OpenMP 函数调用也由编译器处理。