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

时间:2017-03-02 08:31:43

标签: c++ visual-c++ macros built-in

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

  

_M_AMD64定义为针对x64处理器的编译的整数字面值100。否则,未定义。

     

_M_X64定义为针对x64处理器的编译的整数字面值100。否则,未定义。

此外,还有以下宏似乎也这样做?

  

_WIN64当编译目标是64位ARM或x64时定义为1。否则,未定义。

根据文档,它们都具有完全相同的定义 - 它们是否相同?是否有任何情况会定义一个而另一个不定义?如果没有,这里的历史是什么?

1 个答案:

答案 0 :(得分:3)

_WIN64在sizeof(void*) >= 8

的每个平台/ CPU架构上定义

第一个64位Windows版本(“Windows XP 64位版本”)实际上是在Intel Itanium CPU上,其宏是_M_IA64。 AMD然后决定创建他们自己的64位指令集,它的宏是_M_AMD64,但是它的第一个桌面Windows版本实际上被称为“Windows XP Professional x64 Edition”。英特尔陷入困境并开始生产支持AMD64指令集(EM64T AKA Intel 64)的CPU,现在Itanium已经死了。

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

_M_AMD64自该架构开始以来就已存在,但我不记得是否同时创建了_M_X64,或者是否稍后添加了_M_X64。您可能需要查看Visual Studio 2003和2005之间发布的Platform SDK和WDK中的编译器以查找。

This MSDN blog post

  

_M_AMD64和_M_X64是等效的。