32位和64位的区别(james-lx)

来源:互联网 发布:java anti csrf token 编辑:程序博客网 时间:2024/05/17 00:52

冯诺依曼的计算机系统关键部分有,处理器、内存、磁盘。

计算机的程序首先是放在磁盘中的,程序分为数据段和代码段两大部分。
当用户执行程序时,操作系统把磁盘上的程序,拷贝(映射)了一份到内存中,
所以这个时候,你试图删除磁盘上的程序,操作系统会阻止你。

内存中的程序也是分为数据段和代码段两大部分,
代码段的代码指令会依次被CPU执行,
而CPU在执行中读取或存放的数据是来源于数据段。

32位和64位是指的CPU对内存的寻址能力,
打个比方:你可以把内存想象成一列长长的火车,每一个车厢,可以放一份数据,
这些车厢我们用32位的数来表示,000000000000000000000000000001 (这就表示第一列车厢,可以放一份数据)。
一共可以放多少份数据呢?  32个位用0和1来表示,一共可以放2 的32次方= 4294967296(bit)= 4(GB)份数据。

CPU寻址,就是去找车厢号,然后存放或拿走里面的数据。

64位的CPU,就是讲CPU硬件可以对64个位来的这么多车厢寻址,这个2进制数的排列组合就比32位大了很多很多。
程序代码被操作系统拷贝放在内存中时,每一个地址(车厢号)都有对应的数据,CPU就是根据车厢号去寻址工作的。

32位的WIN操作系统,运行程序时,会给每一个程序构建一个32位的虚拟地址空间,每一个程序都有自己的一列32位数的火车放数据,
而物理内存却本来只有一列32位数的火车,怎么为每一个程序(进程 instance)安排一列32位数的火车呢?
CPU做了手脚,为每一个程序虚拟了独立的4GB空间,然后操作系统占一点,留给每个程序的虚拟地址空间是2.5GB。

正是因为操作系统为每一个程序独立分配了地址空间,从WIN XP之后,WINDOWS 平台变得坚如磐石,
而XP或之前的系统中每一个程序都公用内存地址空间,经常会发生蓝屏和崩溃。



参考《WINDOWS核心编程》《加密与解密》