在软件包的选择上常常会遇到一些容易让人产生混淆的指令集名称,下面对这些名称做一点解释:
1)x64是对原有32-bit x86指令集的64位扩展的一个总称,包括:
AMD公司的x86-64(x86-64后来更名为AMD64)
Intel公司的 IA-32e(后来又称为EMT64)
AMD64和EMT64在绝大多数情况是兼容的,大多数代码可以同时在两种指令集上正常运行。
2)Intel还有一种64位指令集IA-64,这个是基于Explicitly Parallel Instruction Computing (EPIC)的 ,是独立的,与x86,x64没有关系
3)ARM64,这个是Advanced RISC Machines (ARM)公司开发的64位指令集。
在软件安装包的命名上 x86-64,x64, amd64基本可以认为是等价的。 arm64这个也比较常见。
下面是Go语言在unix上判断系统指令集的一段C代码,在执行uname命令后,通过字段machine里包含字符串来判断指令集,
if(uname(&u) < 0)
fatal("uname: %s", strerror(errno));
if(contains(u.machine, "x86_64") || contains(u.machine, "amd64"))
gohostarch = "amd64";
else if(hassuffix(u.machine, "86"))
gohostarch = "386";
else if(contains(u.machine, "arm"))
gohostarch = "arm";
else
fatal("unknown architecture: %s", u.machine);
参考文章: