龙空技术网

超能课堂:什么是64位处理器

超能网 1650

前言:

此时姐妹们对“c语言定义64位”都比较重视,我们都需要了解一些“c语言定义64位”的相关知识。那么小编在网摘上搜集了一些有关“c语言定义64位””的相关文章,希望我们能喜欢,咱们一起来了解一下吧!

现在无论是电脑里面的x86处理器还是手机里面的ARM处理器都是64位的了,通常对于消费级的产品来说,就是支持x86-64指令集的x86处理器,或是支持ARM64指令集的ARM处理器。其实早在上世纪60年度64位的CPU就已经用在超级计算机上,到了90年代64位处理器也开始应用于工作站与服务器,个人电脑是在AMD 2003年推出速龙64后才开始渐渐普及,而智能手机上用的64位处理器ARMv8-A架构是2011年发布的。

这里所说的64位是指CPU的位宽,简单的说,CPU位宽指的是一个时钟周期内CPU能处理的二进制位数,如8086 CPU是16位的,可以一次处理2个字节(16个bit),80386 CPU是32位,能一次处理4个字节,目前的CPU基本上64位的了,一次能处理8个字节。 我们的Windows操作系统也分为32位和64位,主要是针对上面CPU的位宽做了些优化,比如32位的CPU就不能用64位的Windows(因为CPU一次只能处理32bit,而操作系统给你的指令是要处理64bit),但64位的CPU就可以运行32位的Windows,也能运行64位Windows。

64位CPU的优点是可以进行更大范围的整数运算,吞吐量大的程序运行起来会更快,但大家经常对CPU的位宽认识有一些误区,比如有人说为了支持更大的内存才CPU才升64位, 也有人认为32位系统只支持4GB内存,真的如此吗?

最大内存容量和CPU的位宽有关系吗?

CPU的寻址能力与它的地址总线位宽有关,而我们通常说的CPU位宽指的是数据总线位宽,它和地址总线位宽半毛钱关系也没有,自然也与寻址能力无关。

数据总线位宽等于CPU整数型寄存器的位宽,CPU内的寄存器通常可分为三种:整数型、浮点型还有其他,而这三种寄存器中只有整数寄存器可以存放指针值也就是内存数据地址,非整数寄存器不可存放指针值,所以读写内存操作不能避开整数型寄存器的位宽限制 ,以64位CPU为例,这些CPU的内部整数型寄存器的位宽为64bit,支持整数的64bit宽度的算术与逻辑运算。

但这并不代表64位CPU的所有总线与寄存器都是64位的,不同类型的寄存器也可以有着不同的位宽,上面说的64位CPU的整数寄存器位宽是64位没错,但浮点寄存器就不一样了,比如奔腾MMX处理器所引入的MMX指令集开创了x86处理器支持SIMD操作的先河,该指令集定义了8个64位的浮点寄存器,而奔腾MMX本身只是个32位处理器。1999年推出,同样只有32位的奔腾3处理器新增了SSE指令集,与之配套的是8个128位寄存器,而后来的AVX2与FMA指令集可支持256位的运算,浮点寄存器也扩大到256位,目前CPU内部最大的是AVX-512指令集所用的512位寄存器。

CPU内有许多不同的寄存器

那CPU的地址总线位宽到底是个什么鬼?

Intel的解释是Physical Address Extensions (PAE) is a feature that allows 32-bit processors to access a physical address space larger than 4 gigabytes.上面图片是Intel Xeon Processor E5-2698 v3的截图,专门就扩展物理地址作了说明,大意就是说这个是为了让32位的处理器能使用超过4GB的内存。这个PAE就是CPU的地址总线位宽,在8086这个16位CPU,它的地址总线位宽是20位,正好能寻址1MB,80286它的PAE是24位,在PentiumII(32位CPU)时这个PAE变成了36位,可以支持64GB的寻址。64位CPU出现之后,其地址总线位宽一般采用的是36位或者40位,它们寻址的物理地址空间为64GB或者1T。

那地址总线和数据总线有什么关系?可以这么理解,地址总线用来定位,数据总线用来传输,也就是当CPU需要从内存读取数据或向内存写入数据时,它使用地址总线来指定其需要访问的存储器块的物理地址,然后通过数据总线发送数据。

所以说,CPU的位宽和寻址能力是没有关系的,16位CPU的地址总线位宽可以是20位,32位CPU的地址总线可以是36位,64位CPU的地址总线位宽可以是40位。所以你下次一定不要说32位的CPU只能寻址2^32(4GB)了,大错特错。

32位系统只支持4GB内存?

理论上32位操作系统的逻辑地址寻址范围只有2^32=4GB,但实际上并不是这样的,虽然常见的Windows 7 32位(真有人在用Windows 10 32位吗?)系统确实只能识别4GB内存,而且最大可用内存最多为3.25GB,但同为32位的Windows Server 2003/2008却可用使用4GB以上的内存,因为这些系统支持PAE物理地址扩展技术。

PAE除了CPU自身支持之外,还需要芯片组、主板还有操作系统的支持才行,比如一些旧主板就不支持大于4GB物理内存,而微软也没有把PAE功能开放到32位的家用操作系统中,即使是Windows Server系统,如果不是企业版的也没有开放PAE功能。

当然了Windows XP/7/8/10系统的内核本身是支持PAE功能的,32位版的系统可通过破解开启此功能以支持4GB以上内存,破解方法其实也不难,网上有许多现成的工具,但说真的,与其去破解,还不如直接装64位的操作系统一了百了。

如果你还在用32位处理器,以上这些都不是你需要考虑的问题。

标签: #c语言定义64位