Win7 64位下让VC++6.0编写的Win32程序单进程运行内存突破2G

39 篇文章 4 订阅

最近在调试一个大型的MFC程序的时候,需要在Cview类中申请一个double(float)array[2100][400][500]的三维数组,首先声明一点,算法比较复杂,暂时没有办法去修改算法,所以必须要申请一个这么大的三维数组空间。

(1)首先在栈中申请了一个固定数组array[2100][400][500],结果VC提示超出栈的保留空间了。这种方法OUT

(2)然后用std::vector<std::vector<std::vector<2100> > > grdarray(400,vector<vector<float> >(NY,vector<float>(500)));去申请一个三维嵌套的Vector,内存上是可以分配的,但是在进行赋值的时候不如数组方面,出现错误,这种方法也被排除。

(3)malloc去申请一个一个内存空间存储三维数组,可以运行,但是在程序运行过程中,出现内存不足的提示。

(4)new一个三维动态数组,也是可以申请那么多的内存,但是依然在运行的过程中出现内存不足的提示。

这让我很费解,一度去检查了是不是程序出现内存泄露或者是死循环,但是不幸是,没有。

        在网上进行一波搜索之后才领悟到:虽然现在电脑是Win7 64位,但是VC++6.0是从Win32的平台移植到win7 64位上的,所以归根结底,依然VC++6.0编写出来的程序依然是Win32程序,Windows系统对于Win32程序的单进程可用内存进行了限制,即最多可用2G内存,其余2G预留给操作系统,即使你是在win64的平台下运行win32程序,单进程也只能调用2G内存。

但是我在Cview类的构造函数中申请一个float型的2100*400*500的动态数组,我差不多需要1.7G内存,加之在程序运行过程中需要分配一些结构体,容器以及数组的内存以及程序本身的内存,很有可能超过2G,这就是为什么在程序运行过程中提示内存不足的原因。

百度了一下,现在贴下一些大大写的技术以及博客的链接,对我了解这个问题以及解决这个问题帮助极大,在此感谢以下的技术大大

      (1)32位模式下C/C++程序可用最大内存  http://m.blog.csdn.net/article/details?id=45534015

      (2)开启PAE以及突破win32系统单个程序的2G内存限制 - Q75X的日志 - 网易博客  http://blog.163.com/xs98775@yeah/blog/static/86284853201303111575240/

      (3)让32位应用程序不再为2G内存限制苦恼 - 一蓑烟雨的专栏 - 博客频道 - CSDN.NET  http://blog.csdn.net/flyingworm_eley/article/details/6523326

      (4) 64位Windows7系统下让32位程序支持4G虚拟内存 | 上岸QQ的鱼  http://www.saqqdy.com/computer-skills/64-windows7-system-to-support-32-bit-process-virtual-memory-4g

       (5) 32位,64位和内存的那点事 | 果壳网移动版  http://m.guokr.com/blog/61322/

       在看了上述的博客后我总结了下列的方法,其细节以及原由还是点击上述的链接进去查看、

      (1)修改boot.ini文件,开启PAE以及AWE模式,修改本地安全策略,见这篇博客32位模式下C/C++程序可用最大内存  http://m.blog.csdn.net/article/details?id=45534015

以及这篇博客让32位应用程序不再为2G内存限制苦恼 - 一蓑烟雨的专栏 - 博客频道 - CSDN.NET  http://blog.csdn.net/flyingworm_eley/article/details/6523326还有这篇博客

开启PAE以及突破win32系统单个程序的2G内存限制 - Q75X的日志 - 网易博客  http://blog.163.com/xs98775@yeah/blog/static/86284853201303111575240/

(2)下载一个小插件,这个插件可以让你为指定的.exe win32程序成功的使用超4G的内存,亲测可用。见这篇博客64位Windows7系统下让32位程序支持4G虚拟内存 | 上岸QQ的鱼

 http://www.saqqdy.com/computer-skills/64-windows7-system-to-support-32-bit-process-virtual-memory-4g 

插件的下载链接我分享到百度网盘:http://pan.baidu.com/s/1i4KkJ9j

(3)最根本的方法还是将你的整个程序一直到win 64位的VS上,win64位的程序理论上单进程可用内存比win32程序要大的多。

 

如果您觉得这篇博文有用,请访问我的个人站:http://www.stubbornhuang.com,更多博文干货等着您。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HW140701

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值