Win7 64位下让VC++6.0编写的Win32程序单进程运行内存突破2G
来源:互联网 发布:linux top c 命令详解 编辑:程序博客网 时间:2024/05/18 07:18
最近在调试一个大型的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程序要大的多。
- Win7 64位下让VC++6.0编写的Win32程序单进程运行内存突破2G
- 在32位windos server 2003上让进程突破2G内存的限制
- VC编写vista或win7下需要管理员权限运行的程序
- VC编写vista或win7下需要管理员权限运行的程序
- VC 编写 Vista 或 win7 下需要管理员权限运行的程序
- VC编写vista或win7下需要管理员权限运行的程序
- VC编写vista或win7下需要管理员权限运行的程序
- 让.Net 应用程序突破2G的内存访问限制64G
- 突破Oracle for win2k的2G内存限制
- 突破oracle for win2K的2G内存限制
- 突破oracle for win2K的2G内存限制
- 突破oracle for win2K的2G内存限制
- 让.Net 应用程序突破2G的内存访问限制
- 让.Net 应用程序突破2G的内存访问限制
- .Net 应用程序突破2G的内存访问限制
- 突破oracle for win2K 的2G内存限制
- WIN7 开启PAE突破4G内存使用限制
- VS2008在win32位编译的打包安装程序 在win7 64位 运行
- 这是我开发的小项目哦~ 名字叫做:Book Your Info,感觉挺有意思的
- hdoj5402 【模拟/构造】
- Sublime Text 配置OpenCV2.4.13开发环境
- Unity Mecanim动画的实现(二):Avatar的配置
- JQuery与Ajax的应用
- Win7 64位下让VC++6.0编写的Win32程序单进程运行内存突破2G
- 【Java】Nested Class
- Android之伪装QQ后台偷偷发短信
- (uva 11732) "strcmp()" Anyone? (trie+左儿子右兄弟表示法)
- 高反差保留&阈值——素描效果——鸟儿
- 平衡二叉树(AVL树)深入解读
- HDU 3496 dp
- UVALive-7278 - Game of Cards【博弈】【sg定理】
- L2-011. 玩转二叉树-PAT团体程序设计天梯赛GPLT