MSVC 内置宏 _M_AMD64 和 _M_X64 之间的区别

Difference between MSVC builtin macros _M_AMD64 and _M_X64

我在查看内置宏的 MSVC 文档时看到了以下宏:

_M_AMD64 Defined as the integer literal value 100 for compilations that target x64 processors. Otherwise, undefined.

_M_X64 Defined as the integer literal value 100 for compilations that target x64 processors. Otherwise, undefined.

此外,还有下面的宏似乎也是这样做的?

_WIN64 Defined as 1 when the compilation target is 64-bit ARM or x64. Otherwise, undefined.

根据文档,它们的定义完全相同 - 它们是否等效?是否存在其中一个被定义而另一个没有被定义的情况?如果不是,这里有什么历史?

_WIN64 在每个 platform/CPU 架构上定义,其中 sizeof(void*) >= 8

第一个 64 位 Windows 版本 ("Windows XP 64-Bit Edition") 实际上是在 Intel Itanium CPU 上,它的宏是 _M_IA64。 AMD 然后决定创建自己的 64 位指令集,它的宏是 _M_AMD64,但它的第一个桌面 Windows 版本实际上被称为 "Windows XP Professional x64 Edition"。英特尔屈服并开始生产支持 AMD64 指令集(EM64T 又名英特尔 64)的 CPUs,而安腾现在几乎已经死了。

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

_M_AMD64 自该体系结构开始以来就存在,但我不记得 _M_X64 是同时创建的还是后来添加的。您可能需要查看 Visual Studio 2003 年至 2005 年间发布的平台 SDK 和 WDK 的编译器才能找到答案。

This MSDN blog post

_M_AMD64 and _M_X64 are equivalent.