32位的系统虚拟地址空间是64TGDT/LDT是13位,2^13*2=16k个4G地址就是64T。但是VirtualAlloc分配的大小只能是一个size_t,那么是不是说32位系统进程的地址空间能被用到的只能是0-4G,这样一来,64T的虚拟空间有什么作用? 我用什么方式能访问到第10T个字节(在虚拟地址空间中).不知道我这样的表述是否清楚,请指教!

解决方案 »

  1.   

    谁跟你说的。现代操作系统基本上都不用分段机制,那些段地址开始都是0,只是用分页机制,而且线性地址只有32位。所以像Windows里进程虚拟地址空间只有4GB。刨去OS保留的2GB,你能用的只有2GB。
    如果你的物理内存比较大的话,是可以通过AWE(地址窗口扩展)配合CPU的PAE机制访问4GB以上地址空间。不过最多也只能到64GB,因为CPU的内存地址线只有36根。而且这部分内存是不分页的,相当于是你在你自己的2GB空间爱你开一个小窗口,用这个小窗口去映射到高端地址。
    再大的虚拟内存虽然可以放到外存里去,但是无法被CPU直接寻址,管理不方便,也没有意义。