32位系统如何用4g以上内存?

廖翌朱廖翌朱最佳答案最佳答案

关于这个问题的理解,需要理清两个问题:第一个是32位系统和64位系统的概念;第二个是操作系统对内存的管理方式,以及程序对内存的使用方式。 首先说32位和64位系统的问题。从处理器的发展历史来看,当年为了适配32位的二进制地址空间(即4gb),x86架构的处理器诞生了32位的数据总线,随后出现了64位数据总线的CPU(例如现在的Intel core i7系列),因此从这个角度来说,64位CPU是比32位CPU先进一代的产物。但是,因为存在地址映射的问题,当使用64位系统的时候,理论上只可以使用到4gb的物理内存在实际中却远远大于这个数字——这是因为操作系统会对内存进行分页管理,虚拟内存(swap文件)的存在也使得可以使用的内存远大于4gb。所以,从使用感受上来说,32位系统和64位系统在使用体验上是几乎完全没有区别的。而题主所说的问题应该是针对软件开发人员来说的。

接下来谈论操作系统对内存的管理方式。无论是32位还是64位系统,当前的操作系统都是采用分段式进行管理,每个进程都有一个属于自己的段,进程所拥有的地址空间被分为若干段,每一段的起始地址和一个段结束地址构成一个段的范围,段与段之间相互独立。在操作系统中,所有的函数调用、数组访问等都必须通过指针来完成,而这样的处理过程都是在内存的段范围内进行的,对于程序员而言,只要不越界,就不会引起错误。而越界访问则会导致错误发生。 从程序的角度来看,一个问题之所以会产生,是因为程序本身有问题,或是硬件有问题。如果单从软件角度来看,程序是没有问题的,那么造成问题产生的唯一可能原因就是硬件的问题了——也就是说,可能是硬件产生了误操作。由于计算机系统采用的是有穷自动机的工作原理,当程序正确时,不会出现无穷递归的情况而导致系统死循环,由此可以认为,只有当程序本身存在问题或者硬件出现问题时,才会导致问题产生。而从经验上来看,硬件出现问题导致的问题更加常见一些,所以,从规避风险的角度出发,我们更应该注意编程时的正确性来避免程序的错误。

发表评论
请发表正能量的言论,文明评论!