32位 与 64 位 区别 : CPU 操作系统 应用程序

https://www.cnblogs.com/mlgjb/p/8385658.html   原文链接

1.64位CPU与32位CPU

这两者的指令集合、操作数位数、寄存器名称和个数等等都不相同。

一、比如一条mov eax,1指令,可能在32bCPU上对应的机器指令是0x1201;在64位机器上就是0x123401。

二、64位CPU里的寄存器是64位的,这样CPU每次处理的数据量也就更大,32位CPU寄存器是32位的。

三、64位CPU里的寄存器数量也多于32位CPU。

四、32位CPU的地址总线不一定是32位的,还有可能是48位的,同样64位的CPU地址总线也不一定是64位,往往都是48位。

五、现在对于主流的处理器,64位的CPU是能够兼容32位指令架构的!!!!!!

2.32位的操作系统与64位的操作系统

32位的操作系统是专门为32位CPU设计的,同样64位的操作系统是为64位的CPU设计的。

前面也说了,64位的CPU能够兼容32位指令架构,因此在64位CPU上也可以安装32位操作系统。

32位的win7可以支持4G的逻辑地址空间,但其中用户能够分到的只有大约是3G多,还有一部分是分给系统内核了,64位的win系统,理论上寻址范围能够达到264。在这里多说一句,操作系统负责逻辑地址到物理地址的映射,因此32位的操作系统只能利用最大4G的物理内存,注意点大家需要注意。

3.32位应用程序与64位的应用程序

32位的程序就是将源码用32位的编译器编译的,64位的程序就是将源码用64位的编译器编译的。

应用程序只接触逻辑地址,并不接触真实的物理地址。

32位的程序理论上可以申请利用4GB的地址空间,64位的程序则可以申请利用大于4GB 的地址空间,这也是64位程序的一个巨大优势。

我们知道应用程序的运行是需要操作系统作为支撑的,这些程序在运行时常常需要进行一些系统调用,还有各种库函数等。

这些可执行文件能否顺利运行有着两个最重要的地方。

1)动态链接库。
2)系统API。

对于Windows系统而言,64位的系统往往具有32位系统的库,因此在64位系统上能够运行32位的程序,但是反过来就不行了,因为32位系统一般没有64位系统的库。

32位升级到64位不是简单的重新编译发布一下就可以了。举个例子,在32位C语言环境里一个指针可以放入一个int型的变量中,但在64位里就不行了了,因为64位程序里的指针为64位,这样的话程序肯定就爆了,因此对于某些程序如果想要升级到64位,则需要修改源码,这个工作是相当繁琐的。

总结

1.32位CPU只能安装32位的操作系统,而32位操作系统只能运行32位的程序。

2.64位CPU可以运行32位或者64位的操作系统,64位操作系统可以运行32位或64位程序。

3.64位版本的程序占用的内存空间更大,因为它的指针是64位的,但同时它又可以申请更多的逻辑地址空间。

猜你喜欢

转载自blog.csdn.net/lgyuWT/article/details/85160036
今日推荐