职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 1489|回复: 5

关于分配内存的问题最大能分到多少?

[复制链接]
huangbo88 发表于 2009-8-31 10:17 | 显示全部楼层 |阅读模式
做数据采集时
需要分配一个大内存缓存
系统要求以2048(2K)的整倍数分配内存
结果发现在VC中
用GlobalAlloc和new最大都只能分配到604160*2048字节的空间
分配604161*2048时就分配不了了
系统中可用内存肯定比这个数值要大得多

现在想问一下
VC中对分配内存的最大值有限制吗?
用什么方法可以分配到更多的内存?
问题补充:
XP单一进程可以使用2G内存
这我知道
现在只能分配到1.15G左右的内存大小
程序其他方面使用的内存可以忽略
而且操作系统+其他软件也只使用了400M左右的内存
qinyi 发表于 2009-8-31 10:18 | 显示全部楼层

关于分配内存的问题最大能分到多少?

Windows下分配大内存方案:
1(可选步骤).开启PAE(物理地址扩展)
这样x86系统可以使用64GB物理内存,xp中在boot.ini加上/pae
2(可选步骤).开启3GB用户模式
3.使用AWE(地址窗口映射)
使用AllocateUserPhysicalPages及MapUserPhysicalPages分配RAM页面
4.分配n个1GB大小的RAM页面
然后在不同时刻将其映射到地址空间
这样相当于能操纵nGB大小的内存
总共能分配的大小取决于你的物理内存总数

当然如果没有足够的RAM,可以牺牲性能使用页面文件
修改页面文件大小使其超过你需要的大小
例如9GB
再用CreateFileMapping创建8个1GB的基于页面文件的对象
需要哪个1GB对象则将其映射至地址空间
这样相当于可以操纵8GB内存

以上只是思路
我没试过有可能行不通
具体操作请参看SDK平台文档
下眩月 发表于 2009-8-31 10:18 | 显示全部楼层

关于分配内存的问题最大能分到多少?

32位的寻址空间是 1024 * 1024 * 1024 * 4 就是 4G
具体可以分配多少内存
这要看机器的内存配置了

604160*2048 已经是 1.18G了
看看你的机器内存是多少
波少 发表于 2009-8-31 10:18 | 显示全部楼层

关于分配内存的问题最大能分到多少?

windows 32位操作系统下
使用内存分页机制
每个进程都在自己虚拟的独立内存里
而通用寄存器为32位
可以使用32根线性地址寻址
寻址的方式等于2的32次方
也就相当于4G左右
也就是说
每个进程只拥有4G左右的虚拟内存空间

并且4G里有2G左右被系统使用
代码能用的就2G以内
地址范围是0x00400000到0x7FFFFFFF

你的实际内存大并不能增加1个进程可以使用的虚拟内存.
采采 发表于 2009-8-31 10:18 | 显示全部楼层

关于分配内存的问题最大能分到多少?

malloc/new的作用是在堆区开辟连续的空间
空闲的空间可能很多
但未必连续
七夜魔君 发表于 2009-8-31 10:18 | 显示全部楼层

关于分配内存的问题最大能分到多少?

我最近也碰到过需要大量内存的情况
开始也是以为内存不够用
然后甚至找了个64位的windows7系统
然后搭上4G内存

后来发现根本不是内存问题
原来是我跑程序的时候在VC里用了debug模式

这个比release占用的内存不知道多了多少倍!同一个程序可能会有数量级的差别


当然
如果你不是这种情况
那么可以肯定的是
VC允许的单一程序最多不能占用多于2G的内存
你可以在程序分配内存的语句处加上判断语句
看看是不是真的内存不够
也许是其它地方出错了~

或者
还可以写个小程序
看看你的机器到底能分配多少内存
你就用一个循环
不停地new
每分配比如100mb你就打印出来一条信息
最后看看什么结果~
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-4-25 13:03 , Processed in 0.109665 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表