我们知道程序只能使用2GB内存的这个限制是32位操作系统架构引起的。传统意义上的32bit操作系统使用32bit的内存地址,这样寻址范围就已经被限制为4GB——4G也就是2的32次方,然而通常操作系统的设计上为了安全性的考虑,应用程序和内核所处的内存地址空间是互相独立的,也就是说,应用程序和内核各自能访问2GB的内存空间。虽然不同的操作系统实现具有不同的值,不过多数现在的操作系统在这一点上都很一致。
AWE可以让32位操作系统下的进程提供64GB的地址空间
要让应用程序突破2GB的限制,具有很多种方法,一种是使用近代Windows NT核心提供的一个变通的方案:4GB内存调整优化技术,可以让应用程序应用到3GB的内存,然而这对现下的高端数据库应用来说仍然是被水车薪,于是Microsoft还在自己的操作系统提供了一个比较重要的特性:AWE(Address Windowing Extension,地址窗口扩展) API集,这个API集的原理其实是基于这样的一个事实:所有的支持PAE的操作系统都有能让IA32处理器直接寻址64GB物理地址的API,回想前面的内容,物理地址是CPU处理的地址,而每个程序私有的2GB内存地址被称为虚地址范围。
然而使用AWE方式必须让应用程序使用AWE API进行编程,对于应用程序来说布局有普遍性,而且应用AWE需要运行操作系统的组策略管理器进行特别的设置,需要一定的技术知识。
有没有方便实用的方法呢?,有的,32位应用程序还具有一种方法可以突破2GB的限制,这就是运行于64bit操作系统下面,虽然这种方法最终可以访问到的内存并不多,只有4GB,然而在多数情况下也都够用了,而且它不需要操作系统和应用程序做任何改变,这是一个比4GB内存调整优化技术更方便的技术,唯一的麻烦只是重新安装操作系统。