我们都知道,32位系统最大只能用3G内存,单程序不能使用超过2G的内存,但是能过破解可以使WIN支持超过4G以上的大内存,打开AWE可以在32位系统下,单程序可以使用超过2G的内存,我现在已经开了PAE,4G内存也全用上了,但是找不到一个可以一次使用2G以上内存的方法和程序,所以在这里求一个做测试
一楼,你不懂不要乱说,看我的图,我内存可以用4G, 我要的是一个能在WIN7下使用超过2G内存的程序,而不要要你们告诉我怎么使系统支持超过2G的程序,麻烦看懂了再回答,我要的是使用一个程序就可以使我的内存严重不足,不要告诉我别的,什么说什么任何32位系统单进程都只能应用最大2GB的内存空间,这是废话 ,Adobe Photoshop不支持WIN7啊
自己可以写一个C程序不断的分配内存,用下面的方法:
办法1:就是上面的朋友提过的 通过 /3GB或者/USERVA开关。
boot.ini 里头加上这个开关,系统会让出1G给应用程序访问。系统自己只用1G。这样子不是什么好办法。微软临时的方案而已。应用程序link时加上 LARGEADDRESSAWARE,在生成EXE的时候设置一个标志位,这个位系统看到了就让你访问 3G的空间(但是内存+页交换太小,你分配一样会失败).
/3GB指定3G,/USERVA指定一个值,不是死的3G.
办法2:通过AWE (Address Window Extension),地址窗扩展
窗?是的,窗。你可以人认为是一个buffer,用来作为中间物,给2边的东西倒腾。
socket接受发送数据也有窗的概念,一样的。
要细看AWE,你到MSDN上查关键是AWE或者Address Window Extension。Google上Goole一把。你有了2G甚至更多的内存(啥机器都有,你不能怀疑一个32位系统装个20G内存会有问题吧?硬件可以做的)可以这么干。没有的话就别这么做了,没什么用.AWE的原理很简单,你在比如4G的物理内存上,分配的一片物理内存X, 你再分配的一片虚拟内存(地址空间)Y,把 X 和 Y 通过address window映射。你可以在这片虚拟内存里头访问4G的物理内存。最多访问多少要看你的参数设置了。
AllocateUserPhysicalPages分配物理内存, VirtualAlloc申请虚拟内存,MapUserPhysicalPages进行映射。没什么难的.MSDN有个sample做这个事情,看看吧! 这么多关键字了应该好查到了。代码我不贴了 ,占篇幅。
顺便说一下,内存文件映射并不把什么映射到(2~4G)这范围。它是进程共享数据的方式,并不是扩大内存的方式。不过如果你有个大硬盘,创建这么个映射来保存/修改数据也是可以的,这不要求大的内存。和内存没关系。
办法1:就是上面的朋友提过的 通过 /3GB或者/USERVA开关。
boot.ini 里头加上这个开关,系统会让出1G给应用程序访问。系统自己只用1G。这样子不是什么好办法。微软临时的方案而已。应用程序link时加上 LARGEADDRESSAWARE,在生成EXE的时候设置一个标志位,这个位系统看到了就让你访问 3G的空间(但是内存+页交换太小,你分配一样会失败).
/3GB指定3G,/USERVA指定一个值,不是死的3G.
办法2:通过AWE (Address Window Extension),地址窗扩展
窗?是的,窗。你可以人认为是一个buffer,用来作为中间物,给2边的东西倒腾。
socket接受发送数据也有窗的概念,一样的。
要细看AWE,你到MSDN上查关键是AWE或者Address Window Extension。Google上Goole一把。你有了2G甚至更多的内存(啥机器都有,你不能怀疑一个32位系统装个20G内存会有问题吧?硬件可以做的)可以这么干。没有的话就别这么做了,没什么用.AWE的原理很简单,你在比如4G的物理内存上,分配的一片物理内存X, 你再分配的一片虚拟内存(地址空间)Y,把 X 和 Y 通过address window映射。你可以在这片虚拟内存里头访问4G的物理内存。最多访问多少要看你的参数设置了。
AllocateUserPhysicalPages分配物理内存, VirtualAlloc申请虚拟内存,MapUserPhysicalPages进行映射。没什么难的.MSDN有个sample做这个事情,看看吧! 这么多关键字了应该好查到了。代码我不贴了 ,占篇幅。
顺便说一下,内存文件映射并不把什么映射到(2~4G)这范围。它是进程共享数据的方式,并不是扩大内存的方式。不过如果你有个大硬盘,创建这么个映射来保存/修改数据也是可以的,这不要求大的内存。和内存没关系。
温馨提示:答案为网友推荐,仅供参考
第1个回答 2009-11-16
自己设一下就可以了。
进程地址空间
所有 32 位应用程序都有 4 GB 的进程地址空间(32 位地址最多可以映射 4 GB 的内存)。对于 Microsoft Windows 操作系统,应用程序可以访问 2 GB 的进程地址空间,称为用户模式虚拟地址空间。应用程序拥有的所有线程都共享同一个用户模式虚拟地址空间。其余 2 GB 为操作系统保留(也称为内核模式地址空间)。所有操作系统版本(从 Windows 2000 Server 开始,包括 Windows Server 2003)都有一个 boot.ini 开关,可以为应用程序提供访问 3 GB 的进程地址空间的权限,从而将内核模式地址空间限定为 1 GB。
为了支持 3 GB 的用户模式进程空间,必须将 /3gb 参数添加到 boot.ini 文件中并重新启动计算机,从而使 /3gb 参数生效。设置此参数后,用户应用程序线程可以寻址 3 GB 的进程地址空间,而为操作系统保留 1 GB 的进程地址空间。
注意: 如果计算机上有 16 GB 以上的可用物理内存,操作系统需要 2 GB 的进程地址空间供系统使用,因此只能支持 2 GB 的用户模式地址空间。为了让 AWE 能够使用 16 GB 以上的内存,应确保 boot.ini 文件中没有 /3gb 参数。否则,操作系统就不能寻址 16 GB 以上的内存。
进程地址空间
所有 32 位应用程序都有 4 GB 的进程地址空间(32 位地址最多可以映射 4 GB 的内存)。对于 Microsoft Windows 操作系统,应用程序可以访问 2 GB 的进程地址空间,称为用户模式虚拟地址空间。应用程序拥有的所有线程都共享同一个用户模式虚拟地址空间。其余 2 GB 为操作系统保留(也称为内核模式地址空间)。所有操作系统版本(从 Windows 2000 Server 开始,包括 Windows Server 2003)都有一个 boot.ini 开关,可以为应用程序提供访问 3 GB 的进程地址空间的权限,从而将内核模式地址空间限定为 1 GB。
为了支持 3 GB 的用户模式进程空间,必须将 /3gb 参数添加到 boot.ini 文件中并重新启动计算机,从而使 /3gb 参数生效。设置此参数后,用户应用程序线程可以寻址 3 GB 的进程地址空间,而为操作系统保留 1 GB 的进程地址空间。
注意: 如果计算机上有 16 GB 以上的可用物理内存,操作系统需要 2 GB 的进程地址空间供系统使用,因此只能支持 2 GB 的用户模式地址空间。为了让 AWE 能够使用 16 GB 以上的内存,应确保 boot.ini 文件中没有 /3gb 参数。否则,操作系统就不能寻址 16 GB 以上的内存。
第2个回答 2009-11-15
我真无奈了,竟然说一楼无知?
你的操作,要靠CPU指令来完成,那么CPU要寻址,一般情况是cache里可以取指令或操作数,在cache里命中操作数几率较小,就需要去RAM里取操作数,32位CPU寻址空间就是2的32次幂,也就是4G的空间了,大于4G的内存地址无法被映射,也就不会被使用。
学学计算机组成原理吧,大学计算机专业的基础课程。
请注意:不要把内存和虚拟内存混为一谈!!
虚拟内存直接由操作系统配置管理,而内存的映射是由CPU完成,软件程序可以控制,但不可能突破CPU寻址能力。
你的操作,要靠CPU指令来完成,那么CPU要寻址,一般情况是cache里可以取指令或操作数,在cache里命中操作数几率较小,就需要去RAM里取操作数,32位CPU寻址空间就是2的32次幂,也就是4G的空间了,大于4G的内存地址无法被映射,也就不会被使用。
学学计算机组成原理吧,大学计算机专业的基础课程。
请注意:不要把内存和虚拟内存混为一谈!!
虚拟内存直接由操作系统配置管理,而内存的映射是由CPU完成,软件程序可以控制,但不可能突破CPU寻址能力。
第3个回答 2009-11-15
这个嘛,你可以试一下装个虚拟机。先装好虚拟软件。然后只留400M的内存给你的WIN7(这个我不知道WIN7运行最少需要多少内存,我的448M的内存都能比较流畅的运行,也就是说你尽量留少一点)把剩下的全都给虚拟机,然后,按照同样的方法在虚拟机中装虚拟机,一直这样下去,我保证你N多内存都给它吃干尽,虚拟机的系统建议装VISTA
第4个回答 2009-11-15
好像是不可能的。32位系统受寻址能力的限制就这样了。不管你用说明办法,只能是自欺欺人。