先说结论:
32位程序和64位程序本质上的区别,是两者在CPU上运行的指令不同。
文章目录
由于是和CPU处理器相关,因此我们从CPU开始说起。
什么是64位?什么是32位? #### 什么是64位CPU处理器?什么是32位CPU处理器?
32位处理器是指cpu处理器一次能处理32个0和1 64位处理器是指cpu处理器一次能处理64个0和1 通俗一点说:
32位,就相当于你拥有32个工人,每次能完成32个工人的工作量 64位,就相当于你拥有64个工人,每次能完成64个工人的工作量 总结:
由32位系统过渡到64位系统,CPU处理数据能力提升了一倍。
之所以叫做“64位处理器”,是因为电脑内部都是实行2进制运算,处理器(CPU)一次处理数据的能力也是2的倍数。8位处理器、16位处理器、32位处理器和64位处理器,其计数都是2的倍数。一次处理的数据越大,该电脑处理信息的能力越来越大;因此64位处理在先天就比32位处理器具有快速的能力。那为什么不用更高级的128位处理器呢?因为位数越高,处理器芯片的设计也就越复杂,目前的技术水平暂时无法制造这么复杂的芯片。
思考: 32位处理器能装64位系统吗(装上64位系统是否一定可以运行64位软件)?
现在对于主流的处理器,64位的CPU是能够兼容32位指令架构的。虽然理论上可以(只要重写32位处理器对应的编译器,使之支持64位系统),但是软件基本上是不会向下兼容,因此现实是不会实现。
32位CPU处理器与64位CPU处理器的不同?
这两者的指令集合、操作数位数、寄存器名称和个数等等都不相同。
1.从指令集合上:
比如一条mov eax,1指令,可能在32bCPU上对应的机器指令是0x1201;在64位机器上就是0x123401。
2.从处理速度上:
64位CPU的数据宽度为64位,64位指令集可以运行64位数据指令,也就是说处理器一次可提取64位数据(只要两个指令,一次提取8个字节的数据),比32位(需要四个指令,一次提取4个字节的数据)提高了一倍,理论上性能会相应提升1倍。
3.从寄存器数量上:
64位CPU里的寄存器数量也多于32位CPU。32位系统里寄存器个数为8个,函数的形参都是存储在栈里面(内存),且函数内的局部变量如果太多的话也会存入栈中。而64位系统含有16个寄存器,比32位系统多了8个,它的函数形参是放在寄存器中,形参个数超过6个则放在栈中,而寄存器的访问速度比内存要快,所以从函数形参的存储可以的知64位要比32位要快。
4.从操作位数上:
32位CPU的地址总线不一定是32位的,还有可能是48位的,同样64位的CPU地址总线也不一定是64位,往往都是48位。
5.从寻址能力上:
内存中一个地址占用8bit,即一个字节,32位cpu含有32根地址线,寻址能力为2的32次方个字节,相当于4G内存(所以,如果我们装32位系统,安装8G内存实际上是没有用的)。而64位cpu理论上寻址能力为2的64次方个字节,但目前硬件还达不到这个水准,当然也用不了这么大的内存。
64位CPU有更大的寻址能力。
什么是64位系统?什么是32位系统?
32位系统与64位系统的不同?
32位的操作系统是专门为32位CPU设计的,同样64位的操作系统是为64位的CPU设计的。
前面也说了,64位的CPU能够兼容32位指令架构,因此在64位CPU上也可以安装32位操作系统。
32位系统理论上最大只能使用4G的物理内存(受地址总线影响,对应2^32 )64位的win系统,理论上寻址范围能够达到2^64,因此64位的系统拥有更高的性能,能够使用更大的内存,能够更快的处理数据。
什么是64位应用程序?什么是32位应用程序?
32位应用程序与64位应用程序的不同?
32位的程序就是将源码用32位的编译器编译的,64位的程序就是将源码用64位的编译器编译的。
应用程序只接触逻辑地址,并不接触真实的物理地址。
32位的程序理论上可以申请利用4GB的地址空间,64位的程序则可以申请利用大于4GB 的地址空间,这也是64位程序的一个巨大优势。
什么是64位库?什么是32位库?
32位库与64位库的不同?
我们知道应用程序的运行是需要操作系统作为支撑的,这些程序在运行时常常需要进行一些系统调用,还有各种库函数等。
这些可执行文件能否顺利运行有着两个最重要的地方。 1)动态链接库。 2)系统API。
64位的系统往往具有32位系统的库,因此在64位系统上能够运行32位的程序,但是反过来就不行了,因为32位系统一般没有64位系统的库。
64位系统能运行32位库吗?32位系统能运行64位库吗?
64位库兼容32位系统,32位库兼容64位系统。
首先,操作系统内核肯定是分体系结构的,如x86_64、ppc64、aarch64等,不同的体系结构肯定是要编译出针对性的内核来运行(兼容的除外)。上层软件分为体系结构相关和体系结构不相关,如果是体系结构相关的也要分不同的体系结构分开编译,如果是体系结构不相关的则可以一次编译处处运行。
不同的程序运行平台上对不同数据类型分配的字节数是不同的。 个人对平台的理解是CPU+OS+Compiler。
64位系统兼容32位库(向下兼容),32位的系统理论上可以兼容64位库(前提是对老的编译器进行优化,一般软硬件的设计思想都是向后兼容,即新产品兼容老产品,但是基本没有让老产品兼容以后的新产品这样的做法)
CPU(32/64位处理器)属于硬件上的概念,它具体一次性处理多少位的数据是由编译器决定的。
总结: 32位处理器不能装64位系统,64位处理器可以运行32位系统。
64位系统可以兼容32位软件,32位系统基本不能使用64位软件。(体系结构不相关除外)