请解释x86
,x32
和x64
之间的区别?它涉及x86
和x32
时有点混乱,因为大多数时候32位程序在x86上运行......
答案 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%。该体系结构的用例是:
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 page和X32 System V Application Binary Interface)。
以下是我在Debian人员在测试后报告了一些错误之后通过最近的端口学到的一些内容:
__x86_64__
(和朋友) 和 __ILP32__
,但不是__i386__
/ __i686__
(和朋友)__ILP32__
因为它在Clang和Sun Studio pushq
和popq
adcq
如果您正在寻找测试平台,那么您可以使用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 –显然,其他人也不同意)。