58

请解释和之间x86的区别?它有点令人困惑,因为大多数时候 32 位程序在 x86 上运行......x32x64x86x32

4

4 回答 4

39

Hans 和 DarkDust 的回答涵盖了 i386/i686 和 amd64/x86_64,因此重新审视它们是没有意义的。这个答案将集中在 X32 上,并提供一些在 X32 移植后学到的信息。

x32 是用于 amd64/x86_64 CPU 的 ABI,使用 32 位整数、长整数和指针。这个想法是将 32 位数据类型的较小内存和缓存占用空间与较大的 x86_64 寄存器集相结合。(参考:Debian X32 端口页面)。

x32 最多可减少约 30% 的内存使用量和最多约 40% 的速度增加。该架构的用例是:

  • vserver 托管(内存绑定)
  • 上网本/平板电脑(低内存,性能)
  • 科学任务(绩效)

x32 是最近添加的。它需要内核支持(3.4 及更高版本)、发行版支持(见下文)、libc 支持(2.11 或更高版本)和 GCC 4.8 及更高版本(改进的地址大小前缀支持)。

对于发行版,它在 Ubuntu 13.04 或 Fedora 17 中可用。内核支持只要求指针在 0x00000000 到 0xffffffff 的范围内。来自System V 应用程序二进制接口,AMD64(使用 LP64 和 ILP32 编程模型),第 10.4 节,p。132(它唯一的句子):

10.4 内核支持
内核应该将系统调用返回的堆栈和地址限制在 0x00000000 到 0xffffffff 之间。

使用支持启动内核时,必须使用syscall.x32=y选项。构建内核时,您必须包含该CONFIG_X86_X32=y选项。(参考:Debian X32 端口页面X32 System V 应用程序二进制接口)。


以下是在 Debian 人员在测试后向我们报告了一些错误后,我通过最近的移植了解到的一些内容:

  • 系统很像X86
  • 预处理器定义__x86_64__(和朋友) __ILP32__,但不是__i386__/ __i686__(和朋友)
  • 您不能__ILP32__单独使用,因为它会在 Clang 和 Sun Studio 下意外显示
  • 与堆栈交互时,必须使用 64 位指令pushqpopq
  • 从 32 位数据类型填充/配置寄存器后,您可以对它们执行 64 位操作,例如adcq
  • 小心出现在高 32 位上的 0 扩展。

如果您正在寻找测试平台,那么您可以使用 Debian 8 或更高版本。他们在Debian X32 Port的 wiki 页面包含所有信息。3 秒游:(1)启动时在内核中启用 X32;(2) 用于debootstrap安装X32 chroot 环境,(3)chroot debian-x32进入环境并测试您的软件。

于 2015-09-19T01:37:55.423 回答
37

x86 是指 PC 中使用的 Intel 处理器架构。型号是 8088(8086 的 8 位总线版本,用于第一台 IBM PC)、8086、286、386、486。之后他们切换到名称而不是数字以阻止 AMD 复制处理器名称。奔腾等,从来没有Hexium :)。

x64 是支持 64 位代码的 x86 指令集扩展的体系结构名称。由 AMD 发明,后来在英特尔无法让自己的 64 位架构具有竞争力时被英特尔复制,安腾的表现并不好。它的其他名称是 x86_64,AMD 的原始名称,常用于开源工具。还有amd64,AMD的下一个名字,常用在微软工具中。英特尔自己的名称(EM64T 和“英特尔 64”)从未流行起来。

x32 是一个与硬件无关的模糊术语。它往往被用来表示“32 位”或“32 位指针体系结构”,Linux 有一个同名的 ABI。

于 2011-10-03T12:58:45.973 回答
9

x86表示 Intel 80x86 兼容。这曾经包括 8086,一个仅 16 位的处理器。如今,它大致意味着任何具有 32 位 Intel 兼容指令集的 CPU(通常是从 Pentium 开始的任何 CPU)。永远不要阅读x32被使用。

x64表示x86兼容但也具有 64 位模式的 CPU(通常是指 AMD 引入的 64 位指令集;英特尔关于 64 位模式的想法完全愚蠢,幸运的是英特尔承认了这一点,现在使用 AMD 变体)。

所以大多数时候你可以这样简化:x86在 32 位模式下x64与 Intel 兼容,在 64 位模式下与 Intel 兼容。

于 2011-10-03T12:42:15.490 回答
0

由于 64 位版本是一种x86架构,因此首先被称为x86-64,这将是最合适的名称,IMO。此外,x32是一件事(如前所述)——然而,'x64' 不是它的延续,所以(理论上)误导(即使很多人会知道你在说什么),因此应该只被认为是营销的东西,而不是“官方”架构(同样,IMO——显然,其他人不同意)。

于 2020-10-05T09:30:36.080 回答