读书人

内存分配的最大值,该如何解决

发布时间: 2012-03-07 09:13:51 作者: rapoo

内存分配的最大值
我们分配内存时,最大可分配多少?!
2G可以不?
new char[2G]
内存是连续分配的么?
内存只有256M

[解决办法]
只要能new出来,就是连续的

你需要检查new返回值,如果是NULL证明声情失败
[解决办法]
win32中,进程的虚拟地址空间是4个G,可以分配3个G的应该没问题的.
[解决办法]
在windows类工作站上,进程的用户空间部分能用最大2G内存,核心部分使用2G。服务器上,用户空间可以使用3G,而核心部分使用1G。
因为系统核心占用,还有自己的程序代码、全局数据、栈等占用了一部分,因此你几乎肯定不能用那么多。
另外,还受到你的实际物理内存的限制。Windows 的物理内存+虚拟内存的总容量,是你机器上所有进程使用的内存总量之和。
你物理内存只有256M的情况之下,默认应该不能分配 char [2g]
[解决办法]
在win32上,默认堆大小为1M,如果要更大的,则需要用程序创建自己的堆,然后自己释放,这样几乎可以
用到几乎所有可用的内存,至于内核2G,用户空间2G的说法是在windows 上的吗,记不得,只记得在linux
系统中用户只可以用3G,剩下的1G给系统用.反正要申请大内存,进程的默认堆大小是不够的.
[解决办法]
默认栈大小才是1M。VC下使用new 是可以用完系统所有内存的,在我的系统上测试过。
在我的机器上
p = new char[1000000000]
是可以运行的。但是通过任务管理器查看,内存占用量急剧上升

读书人网 >C++

热点推荐