MSVC内置宏 _M_AMD64 和 _M_X64 的区别是什么?

8
我在查看MSVC内置宏的文档时发现了以下宏:
_M_AMD64代表64位处理器,编译目标为x64时定义为整数常量100,否则未定义。
_M_X64代表64位处理器,编译目标为x64时定义为整数常量100,否则未定义。
另外,还有一个似乎与上述宏相同的宏?
_WIN64表示编译目标为64位ARM或x64时定义为1,否则未定义。
根据文档,它们都有完全相同的定义——它们是否等价?是否存在一种情况,其中一种宏被定义而另一种未被定义?如果没有,这里的历史是什么?

1
AMD64是第一个64位处理器,但它包含一个品牌名称。X64表示它是类似的64位处理器,可能来自其他生产商,现在也正在构建兼容硬件。 - Bo Persson
2
x64 有很多名字。太多了。这就是竞争公司的销售人员参与时会发生的事情。 - Hans Passant
1个回答

9

_WIN64在任何sizeof(void*) >= 8的平台/CPU架构上都定义了。

第一个64位Windows发布版本(“Windows XP 64-Bit Edition”)实际上是在Intel Itanium CPU上,它的宏是_M_IA64。然后,AMD决定创建自己的64位指令集,其宏是_M_AMD64,但实际上适用于它的第一个桌面Windows版本被称为“Windows XP Professional x64 Edition”。Intel屈服并开始生产支持AMD64指令集(EM64T AKA Intel 64)的CPU,而Itanium现在几乎死亡。

您仍然会在某些地方和文件名中看到AMD64名称,但很多人现在只称其为x64或x86-64。

_M_AMD64从那个架构的开始就存在,但我记不清是否同时创建了_M_X64,还是后来添加的。您可能需要查看Visual Studio 2003和2005之间发布的Platform SDK和WDK中的编译器才能找出答案。

这篇MSDN博客文章说:

_M_AMD64和_M_X64是等价的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接