引用程序的32位和64位版本的最正确方法

时间:2018-11-18 18:46:16

标签: x86 64-bit x86-64 terminology

这个问题是关于32位和64位x86的术语的。

如果我有2个目录带有相同程序的源代码-一个目录用于32位Windows,另一个目录用于64位Windows,那么这些文件夹的更正确的名称是:

  • x86-64 x64
  • 还是 IA-32 x64

我已经阅读了一些网络资源,但听不懂。仅作记录:

2 个答案:

答案 0 :(得分:3)

x86可以是一个广义的术语,它涵盖了所有与8086向后兼容的CPU,以及包括x86-64在内的所有体系结构扩展。

请注意,IA-64根本不是 x86,它是Itanium (a 64-bit VLIW architecture with explicit speculation / parallelism)。它也是由英特尔设计的,但是就兼容性或设计而言,它与x86完全无关。 (出于兼容性考虑,早期的IA-64 CPU也集成了x86内核。英特尔在推动IA-64,而AMD在推动AMD64 / x86-64)

英特尔有时会说自己的CPU具有IA内核+集成的GPU和每个IA内核之外的其他逻辑。 (IA =英特尔架构= x86)。


可以调用

专门用于32位x86 (不包括16位或64位)

  • IA-32(有时由Intel使用)
  • i386或i686(在Linux上常见)
  • (仅限Windows):x86 。的确是这样:在Windows世界中,“ x86”专门表示32位。这就是为什么您使用该名称的Program Files (x86)目录。这种选择会给每个人带来潜在的术语混乱,因为相对于ARM或MIPS,“ x86”仍然是总体上指代该体系结构的最佳方法。
  • 很少:x86-32。我所知道的任何硬件或软件供应商都没有正式使用此功能,但这是一个明确的有用术语。

永远不要称它为x32。 x32是x86-64 System V ABI的ILP32变体:64位模式下的32位指针。 https://en.wikipedia.org/wiki/X32_ABI


64位x86 更易于具体引用(不包括32位和16位):

  • x86-64或x86_64(破折号与下划线完全不重要。在文本中,大多数人使用破折号,但在大多数语言中,_只能是函数/变量名称的一部分。)
  • AMD64或amd64
  • (仅限Windows)x64
  • (通常仅在Intel CPU体系结构文档中,它们并不流行,而且我在软件目录名称或配置选项中也没有看到它们)IA-32e或Intel64。显然,“ e”代表“扩展名”。 https://en.wikipedia.org/wiki/X86-64#Intel_64 的“历史记录”部分提到了命名。

不是IA-64,那是一个独立的体系结构。

当然,如果您想成为书呆子,则需要x86-64 CPU支持旧模式,因此您可以在x86-64 CPU上运行纯32位OS,并且它仍然是 一个64位CPU。

在运行32位用户空间的64位内核下,CPU处于“兼容”模式,这与32位受保护模式类似,是 lot ,但页表格式具有52位物理地址。 (x86-64页表格式基于PAE页表的36位物理地址宽度。)用户空间很难分辨32位内核与32位内核之间的区别。 64位内核,但特定于OS的东西除外,例如通过系统调用询问内核。


软件目录名称

许多项目都使用i386x86-64amd64。作为最模糊的建议,这是我的建议。 (或者也许是i686,如果您不太在意与PPro之前的CPU兼容。)

有些东西,例如GMP(GNU MultiPrecision库),它具有针对许多体系结构的手写asm,它们使用“ x86”和“ x86_64”。 https://gmplib.org/repo/gmp/file/tip/mpn

(GMP具有针对不同x86 CPU的相同功能的多个手动调整版本。在“ x86”中,存在具有针对Pentum,Core 2,Haswell和/或利用指令而调整的不同版本功能的子目录-设置像BMI2这样的扩展名。这是不寻常的;大多数项目没有具体说明。有些项目可能会有一些东西可以利用AVX或AVX512或SSE4.1,例如,但这通常只在源文件中。)

答案 1 :(得分:2)

  • x86-32版本适用于与Intel兼容的32位处理器。
  • x86-64版本适用于Intel兼容的64位处理器。
  • IA-64版本专门用于 64位Intel Itanium微处理器。

有时称为:

  • x86-32有时也称为IA-32,i386或i686,x86(请参阅注释1),x32(请参阅注释2)。
  • x86-64有时也称为AMD64,Intel 64,x64。

注1:严格来说,这是不正确的,因为

  

x86涵盖了与8086向后兼容的所有CPU以及该体系结构的所有扩展,包括x86-32和x86-64。

尽管如此,这种缩短通常在Windows世界中使用。

注2:不应用于避免与x32 ABI混淆。

来源: