引用 x86 相关 CPU 的 32 位和 64 位程序版本的最正确方法是什么?

The most correct way to refer to 32-bit and 64-bit versions of programs for x86-related CPUs?

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

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

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

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

请注意,IA-64 根本不是 x86,它是Itanium (a 64-bit VLIW architecture with explicit speculation / parallelism)。它也是由 Intel 设计的,但在兼容性或设计方面与 x86 完全无关。 (早期的 IA-64 CPUs 还集成了一个 x86 内核,以实现兼容性。Intel 在推动 IA-64,而 AMD 在推动 AMD64/x86-64)

Intel 有时会谈论他们的 CPUs 具有 IA 内核 + 集成 GPU 和每个 IA 内核之外的其他逻辑。 (IA = 英特尔架构 = x86)。


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

  • IA-32(英特尔有时使用)
  • i386 或 i686(常见于 Linux)
  • (仅限 Windows):x86。确实如此:在 Windows 世界中,“x86”特指 32 位。这就是为什么您有一个具有该名称的 Program Files (x86) 目录。这种选择可能会给每个人造成潜在的术语混淆,因为“x86”仍然是迄今为止指代一般体系结构的最佳方式,而不是 ARM 或 MIPS。
  • 很少:x86-32。据我所知,任何硬件或软件供应商都没有正式使用这个术语,但这是一个非常有用的术语。

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


64-bit x86更容易具体指代(不包括32和16位):

  • x86-64 或 x86_64(破折号与下划线根本不重要。在文本中大多数人使用破折号,但只有 _ 可以成为 function/variable 的一部分大多数语言的名称。)
  • AMD64 或 amd64
  • (仅Windows)x64
  • IA-32e 或 Intel64(主要仅在英特尔 CPU-架构文档中记录英特尔对 x86-64 的实现,这些并不流行,我没有在软件目录名称或配置选项中看到它们).显然,“e”代表“扩展”。 https://en.wikipedia.org/wiki/X86-64#Intel_64 has a History section that mentions naming. There are 在 Intel 和 AMD 的 x86-64 实现之间,主要只影响内核,不影响用户 space。

不是 IA-64,那是一个独立的架构。

当然,如果你想学究气,x86-64 CPUs 需要支持 legacy 模式,所以你可以 运行 纯 32 位 OS x86-64 CPU,它仍然 64 位CPU。

使用 64 位内核 运行ning 32 位用户 space,CPU 处于“兼容”模式,很多 类似于 32 位保护模式,除了 page-table 格式具有 52 位物理地址。 (超过 PAE 页面 tables 的 36 位物理地址宽度,x86-64 页面-table 格式所基于的。)用户-space 将很难说出 运行ning 在 32 位内核和 64 位内核下的区别,除了 OS-特定的东西,比如通过系统调用询问内核。


软件目录名称

许多项目采用 i386 而不是 x86-64amd64。这是我最明确的建议。 (或者如果你真的不关心与比 PPro 更早的 CPU 的兼容性,也可以是 i686。)

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

(GMP 有针对不同 x86 CPUs 的同一函数的多个手动调整版本。在“x86”中,有针对 Pentum、Core 2、Haswell、and/or 利用像 BMI2 这样的指令集扩展。这很不寻常;大多数项目都没有那么具体。有些可能会有一些东西可以利用 AVX 或 AVX512,例如 SSE4.1,但那是通常只在源文件中。)

  • 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 covers all CPUs that are backwards-compatible with 8086 and all extensions to the architecture including x86-32 and x86-64.

不过,这种缩写在 Windows 世界中经常使用。

注意 2:不应使用以避免与 x32 ABI 混淆。

来源: