x86,x32和x64架构之间的区别?

时间:2011-10-03 12:32:43

标签: architecture 64-bit intel

请解释x86x32x64之间的区别?它涉及x86x32时有点混乱,因为大多数时候32位程序在x86上运行......

4 个答案:

答案 0 :(得分:25)

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

x64是启用64位代码的x86指令集扩展的体系结构名称。由AMD发明,后来由英特尔抄袭,当他们无法让自己的64位拱门具有竞争力时,Itanium的表现并不好。其他名称是x86_64,AMD的原始名称,常用于开源工具。而amd64,AMD的下一个名字,常用于微软工具。英特尔自己的名字(EM64T和“Intel 64”)从未流行过。

x32是一个与硬件无关的模糊术语。它倾向于用于表示“32位”或“32位指针架构”,Linux具有该名称的ABI。

答案 1 :(得分:25)

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

x32是使用32位整数,长整数和指针的amd64 / x86_64 CPU的ABI。我们的想法是将32位数据类型的较小内存和缓存占用与较大的x86_64寄存器组合。 (参考:Debian X32 Port page)。

x32可以将内存使用率降低约30%,速度提升约40%。该体系结构的用例是:

  • vserver hosting(内存绑定)
  • 上网本/平板电脑(内存不足,性能不足)
  • 科学任务(表现)

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

对于发行版,它在Ubuntu 13.04或Fedora 17中可用。内核支持只需要指针在0x00000000到0xffffffff的范围内。从System V Application Binary Interface, AMD64 (With LP64 and ILP32 Programming Models),第10.4节,p。 132(这是唯一的一句话):

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

启动内核并获得支持时,您必须使用syscall.x32=y选项。 构建内核时,必须包含CONFIG_X86_X32=y选项。 (参考:Debian X32 Port pageX32 System V Application Binary Interface)。

以下是我在Debian人员在测试后报告了一些错误之后通过最近的端口学到的一些内容:

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

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

答案 2 :(得分:7)

x86表示Intel 80x86兼容。这曾经包括8086,一个只有16位的处理器。现在它大致意味着任何具有32位Intel兼容指令集的CPU(通常是Pentium以后的任何指令)。切勿阅读x32正在使用的内容。

x64表示兼容x86但也具有64位模式的CPU(最常见的是AMD引入的64位指令集;英特尔对64-的概念位模式是完全愚蠢的,幸运的是英特尔承认并且现在正在使用AMD的变体。

因此,大多数情况下您可以通过这种方式进行简化:x86在32位模式下与Intel兼容,x64在64位模式下与Intel兼容。

答案 3 :(得分:0)

由于64位版本是x86体系结构,因此首先被称为x86-64,这将是最合适的名称IMO。此外,x32是一件事(如前所述),但是'x64'并不是该事物的延续,因此(理论上)会引起误导(即使许多人会知道您在说什么),并且应该因此只能被认为是一种营销手段,而不是一种“官方”架构(同样,IMO –显然,其他人也不同意)。