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

joh*_* j. 2 64-bit x86 terminology x86-64

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

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

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

我已经阅读了一些网络资源,但无法理解。仅作记录:

Pet*_*des 8

x86 可以是一个广义的术语,涵盖所有向后兼容 8086 的 CPU,以及对架构的所有扩展,包括 x86-64。

请注意,IA-64 根本不是x86,而是Itanium(具有显式推测/并行性的 64 位 VLIW 架构)。它也是由 Intel 设计的,但在兼容性或设计方面与 x86 完全无关。(早期的 IA-64 CPU 也集成了 x86 内核,以实现兼容性。Intel 正在推动 IA-64,而 AMD 则在推动 AMD64/x86-64)

英特尔有时会说他们的 CPU 具有 IA 核心 + 集成 GPU 以及每个 IA 核心之外的其他逻辑。(IA = 英特尔架构 = x86)。


32位x86具体(不包括16位或64位)可以调用

  • IA-32(有时被英特尔使用)
  • 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是需要支持legacy模式的,所以你可以在x86-64的CPU上运行纯32位的OS,而且还是64位的CPU。

运行32位的用户空间中的64位内核,CPU处于“兼容性”模式,这是一个很大一样,除了页表格式的32位保护模式的具有52位的物理地址。(超过来自 PAE 页表的 36 位物理地址宽度,x86-64 页表格式基于它。)用户空间很难区分在 32 位内核下运行与在 32 位内核下运行之间的区别。一个 64 位内核,除了特定于操作系统的东西,比如用系统调用询问内核。


软件目录名称

许多项目使用i386vs. x86-64amd64. 这将是我的建议,因为这是最不明确的。(或者如果你真的不关心与比 PPro 更旧的 CPU 的兼容性的话,也可以是 i686。)

有些,例如 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,但这通常只是在源文件中。)


joh*_* j. 7

  • 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 混淆。

资料来源: