每个版本的Visual Studio 2008,2010和2012支持的最小目标处理器体系结构(用_M_IX86
预定义宏表示)是什么?
例如,MSVS 2012仅支持Pentium Pro及更高版本。
答案 0 :(得分:8)
经典的开关是/G
。对于不同版本的编译器,您的可用选项会有所不同(较新版本会删除较旧的选项,尽管出于兼容性原因继续接受它们)。这是你得到的:
/G3
针对386个处理器优化的内置代码(_M_IX86
设置为300)/G4
用于486处理器(_M_IX86
设置为400)/G5
针对Pentium优化的内置代码(_M_IX86
设置为500)/G6
针对Pentium Pro,II和III优化的内置代码(_M_IX86
设置为600) /G7
针对Pentium 4或AMD Athlon优化的内置代码(_M_IX86
设置为700)
/GB
指定“混合”模式或发布该版本编译器时合理的最小公分母。如果未指定其他选项,则这是默认选项。
当然,明确提到将此选项设置为针对较新的处理器架构进行优化并不会阻止您的代码在较旧的处理器架构上运行。它不是优化的架构,可能运行得更慢。
但是,如果你在a current version of the documentation中查找这个编译器选项,你将看不到任何这一点。所有你看到的是Itanium处理器(我们将放在一边)。那是因为the compiler shipping with VC++ 2005 dropped the /G3
–/G7
compiler options altogether:
[{1]},
/G3
,/G4
,/G5
,/G6
和/G7
编译器选项已被删除。编译器现在使用“混合模型”,尝试为所有体系结构创建最佳输出文件。
所以,虽然我们很多人都很清楚VC ++ 6,但这个代码生成设置只是在VC ++ 2008之前的历史好奇心。所以我不确定你在哪里得到VS 2012仅支持的印象奔腾专业版。我无法在官方文档或其他地方的任何地方找到这方面的提及。编译器2012版的限制因素不是处理器体系结构,而是OS版本。如果您修补了编译器,库和所有其他装备以支持Windows XP,那么您将能够在原始的Pentium-233上运行您的应用程序,您可以在其上使用Windows XP。 / p>
/GB
宏的目的实际上只是一个指标,表明您的目标是英特尔IA-32处理器系列 - 通常称为旧的32位x86 - 与其他支持的其他产品相比目标体系结构,如64位x86的_M_IX86
。您现在应该将其视为已定义/未定义的值。
是的,_M_AMD64
的旧值表仍然显示在the latest version of the preprocessor documentation中,但它完全过时了。您会注意到其他过时的符号也出现在那里,例如_M_IX86
:PowerPC编译器附带的MSVC ++的最新版本是什么? 4.2
但这只是故事的一部分。还有其他编译器选项可以控制与目标体系结构相关的代码生成。
例如,_M_PPC
开关。从the latest version of the documentation开始,您有以下选项:
/arch
基本上设置了最小公分母,使用x87作为浮点/arch:IA32
打开SSE指令/arch:SSE
打开SSE2指令(并且是x86的默认)/arch:SSE2
启用了英特尔高级矢量扩展程序 /arch:AVX
打开了英特尔高级矢量扩展指令2
如果您阅读了“备注”部分,您还会看到这些选项可能不仅仅意味着指定的指令集。例如,由于支持SSE指令的所有处理器也支持/arch:AVX2
指令,因此在指定CMOV
或更高时将生成CMOV
指令。 /arch:SSE
指令与SSE无关;实际上,SSE是在Pentium III中引入的,而CMOV
是在Pentium Pro中引入的。但它保证在任何支持SSE的架构上都得到支持。
其他相关选项由CMOV
开关控制。这是从VC ++ 2008开始的新功能,可能是旧/favor
- /G3
选项的替代品。正如the documentation所说:
/G7
是默认设置,并生成没有唯一优化的代码/favor:blend
生成特定于英特尔x86-64实现的代码/favor:INTEL64
生成特定于AMD实施x86-64的代码/favor:AMD64
生成特定于英特尔Atom处理器的代码