我有一个程序需要使用大内存(6G)我的系统已经打了PAE补丁,它是不是会自动能使用超过4G的内存呢?
解决方案 »
- 如何动态修改dlg的风格?
- 杭州公司借宝地招人
- 有关Extended Combo Box图片显示的疑问
- MinGW 编译usb上位机程序,提示缺少文件?
- double与float
- 如何通过代码方式建立 VPN 连接?
- ado远程访问sql server2000的效率问题
- 帮帮我好吗,如何在背景图上移动小图片
- 如何在程序里向Windows而不是程序本身进程发模拟键盘按键和鼠标操作信息?
- CString a="Tue, 18 Mar 2003 07:35:36 GMT"和CTime t = CTime::GetCurrentTime();怎么比较啊
- 关于VC6与VS2005调试器互相冲突的问题!
- Vc中一个对话框中的数据在另一个对话框的编辑框显示怎么实现
什么叫不能同时看到呢?本来就不能同时使用吧,一般的CPU也就是64位,8个字节,怎么可能同时使用呢?!
看你的操作系统。32bit下,我从没有用到超过4G的内存,PAE也没用。是否有高明的方法,我不知。但64bit的应该没问题。我在windows sever 2003 64bit下可以使用8g没问题。
这个PAE补丁是在微软下载的应该也属于系统补丁。有人这样用过吗??
非服务器版的32位windows最多能用约3.7g物理内存,这是由软件人为限制的,你开pae,安再多内存也没用
HANDLE h = CreateFileMapping(INVALID_HANDLE_VALUE, 0,
PAGE_READWRITE, 1, 0, NULL);
分配的内存不一定占用地址空间,
程序基本用不了,CreateFileMapping 只是分配了
使用的话还需要以来 CreateFileMapping类函数
完美支持直接上64位系统
我上了个MSDN,上面说System Support for PAE
PAE is supported only on the following 32-bit versions of Windows running on x86-based systems:
Windows 7 (32 bit only)
Windows Server 2008 (32-bit only)
Windows Vista (32-bit only)
Windows Server 2003 (32-bit only)
Windows XP (32-bit only)
Windows 2000 Datacenter Server
Windows 2000 Advanced Server
这样的话,看来系统还是支持PAE的,但是我们的应用程序需要怎么做才能访问这些超过的内存呢?
是不是不用干什么就能访问呢?
你可以看msdn.microsoft.com/en-us/library/windows/desktop/aa366796(v=vs.85).aspx
msdn.microsoft.com/en-us/library/windows/desktop/aa366778(v=vs.85).aspx#physical_memory_limits_windows_xp
32位windowsxp只能用4g物理内存,主存还不到4g,因为其他设备则会占用物理地址
按这个链接,PAE使操作系统可以使用多余4G内存,用于页面交换,提高性能。当多个程序同时运行时,可以改善性能。但关键是这句:
PAE does not change the amount of virtual address space available to a process. Each process running in 32-bit Windows is still limited to a 4 GB virtual address space. 就是说,一个具体的应用程序可使用的内存,还是不能大于4 GB 。所以,LZ不要再费神了。换64bit操作系统。
而且访问的不是文件是分配的内存。
http://msdn.microsoft.com/en-us/library/aa366527(v=vs.85).aspx
里面有详细的说明。
大体过程是用VirtualAlloc在进程的地址空间里开一个窗口,然后利用AWE提供的函数,分配一定的物理内存。
然后利用相关的函数将其一部分映射到进程地址空间里的窗口中。通过移动窗口的映射位置,就可以访问那部分内存了。
根据x86的PAE实现限制,最大可以寻址的物理内存是64GB。
不过AWE因为是没有分页的物理内存,所以如果一个程序分配过多的话,OS可用的分页内存就会减少了。
因为AWE不会被交换到硬盘的交换文件,所以可以除了为数据库、图形处理等高内存需求用途外,另外就是可以用来暂存密钥等敏感信息。
是可以的,Windows提供了AWE(地址窗口扩展),允许进程分配没有分页的物理内存来用,32位应用程序可以使用2GB以上的内存。
http://msdn.microsoft.com/en-us/library/aa366527(v=vs.85).aspx
里面有详细的说明。
大体过程是用VirtualAlloc在进程的地址空间里开一个窗口,然后利用AWE提供的函数,分配一定的物理内存。
……
[/Quote]谢谢两位!
看了这个链接:
http://msdn.microsoft.com/en-us/library/aa366527(v=vs.85).aspx
这么多年第一次弄懂AWE/PAE的用途,是用于数据处理程序缓冲交换数据。
只是现在一直用64bit系统,不方便实际写段程序,运行一下。