http://laoyang.mypm.net
公 告
登 陆
日志日历
日 志
评 论
链 接
统 计
windows 应用程序2g内存限制


我也是网上听说的,32位系统最多能分配的内存是2^32 也就是差不多4G,然后去掉系统占用的一些乱七八糟的东西,最后分给用户能控制的地址段是2G

网上有这样一段话,仅供参考。

32位系统使用超过4GB的物理内存也是可以的,但是有一些限制:
1. 必须有那么多内存安装(废话)
2. 操作系统要支持PAE(物理地址扩展)

就你的需要来说,XP、Win2003标准版是不可能的了,它们支持PAE也只限于4GB物理内存,至少要Win2003企业版,支持32GB以上内存。

有了操作系统的支持,32位应用程序只需要用AWE API就可以访问更多的物理内存了,AllocateUserPhysicalPages、MapUserPhysicalPages、FreeUserPhysicalPages等等。
注意,用这种方法,分配了10GB内存,但是不能线性访问的,要分次映射(MapUserPhysicalPages)到用户的2GB地址空间中的一个小窗口,然后通过这个小窗口访问,类似DOS程序使用EMS、XMS的方法。

 

在 64 位的 Windows 2003上运行:另一个选择是在 64 位的 Windows 操作系统上运行32 位的 Domino 服务器。这样操作可以将内核的地址空间从分配给 32 位应用程序的地址空间移出,并移入一个独立的 64 位地址空间。对于采用了 Large Address Aware 选项进行编译的Domino 7 服务器,就可以占用 32 位应用程序可用的用户地址空间上限(即4 GB)。对于未采用Large Address Aware 选项进行编译的Domino 6 服务器,缺省情况下仍然有2 GB的用户地址空间限制。关于在 64 位的 Windows平台运行32位应用程序,还有其他忠告,请参阅相关信息。

1. 使用/3GB 参数:如上所述,这个方法是最不可行的,Lotus技术支持通常也不推荐用户使用。如果您坚持使用这个选项,请考虑加入/userva=2800 参数。因为它潜在的约束,强烈建议在应用于生产环境中之前,先在测试环境中对这个配置进行测试。


应用层(Domino)- /3GB 参数会发挥一定作用;然而,即使启用这个内核层面的设置,32位进程还是无法使用超过2 GB的用户地址空间,除非编译时加入了 /LARGEADDRESSAWARE 参数。在编译32位可执行程序时必须指定这个参数。

如果系统内核配置了 /3GB 参数,而在编译可执行程序(.exe)时又未使用Large Address Aware 选项,那么每个进程可寻址的用户地址空间上限依然是2GB。逻辑正好相反,这多出来的1 GB并没有还给系统内核,而是在用户地址空间中被标记成保留块。这会引发一个问题,即:1 GB的虚拟地址空间就不再可用了。因此,仅当我们考虑对进程用 /LARGEADDRESSAWARE 参数进行编译时方可使用/3GB 参数。不恰当的使用/3GB 参数非但不能解决什么问题,反而会引起更多的问题。

cri 发表于 2011/4/26 19:36:00 阅读全文 | 回复(1) | 引用通告 | 编辑 | 收藏该日志
Re:windows 应用程序2g内存限制
最终64位系统+win7,程序选项打开large image file support解决
cri发表评论于2011/4/26 19:46:00 个人主页 | 引用 | 返回 | 删除 | 回复

发表评论:

    昵称:
    密码:
    主页:
    标题: