我正在查看有关内置宏的 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 在每个平台/CPU 架构上定义,其中 sizeof(void*) >= 8
第一个 64 位 Windows 版本(“Windows XP 64 位版”)实际上是在 Intel Itanium CPU 上运行的,它的宏是 _M_IA64。 AMD 然后决定创建他们自己的 64 位指令集,它的宏是 _M_AMD64 但它的第一个桌面 Windows 版本实际上被称为“Windows XP Professional x64 Edition”。 Intel 屈服并开始生产支持 AMD64 指令集(EM64T 又名 Intel 64)的 CPU,而 Itanium 现在几乎已经死了。
您仍然会在某些地方和文件名中看到 AMD64 名称,但现在很多人只称它为 x64 或 x86-64。
_M_AMD64 自该架构开始以来就存在,但我不记得 _M_X64 是同时创建的还是后来添加的。您可能必须查看 Visual Studio 2003 和 2005 之间发布的平台 SDK 和 WDK 的编译器才能找到答案。
_M_AMD64 and _M_X64 are equivalent.
关于c++ - MSVC 内置宏 _M_AMD64 和 _M_X64 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42550334/