c++的new最大能分配多少内存

percyzhang 2005-10-27 05:02:33
unsigned int a=1500000000;
BYTE* d=new BYTE[a];
出现异常

unsigned int a=1400000000;
BYTE* d=new BYTE[a];
能申请到虚拟内存

在256M内存机器和2G内存机器上都是这样,哪位高手能给予帮助
...全文
4741 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
YFY 2005-10-27
  • 打赏
  • 举报
回复
楼主怎么要那么大内存啊。
cxyol 2005-10-27
  • 打赏
  • 举报
回复
堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。
doway 2005-10-27
  • 打赏
  • 举报
回复
#include <iostream>

int main()
{
//
unsigned int sz = 1024*1024*1024*2;
try {
char* a = new char[sz];
}
catch (...) {
std::cout << "out of memory\n";
}

return 0;
}

测试时这个会报错,但改成 1024*1024*1024*1 后还可以。证明与 Windows 所声称的一样,用户可以使用的内存不到 2G,而 new 仅仅受到这个限制。

楼主如果不想受此限制,可以换 64 位机器和操作系统。:)

oyljerry 2005-10-27
  • 打赏
  • 举报
回复
按照系统来说,一般每个应用程序分配4G的虚拟内存,然后系统需要占用2G,因而给应用程序的只有2G了,(不过,这个可以调整) 还要去除一些数据占用等,具体需要测试了
寻开心 2005-10-27
  • 打赏
  • 举报
回复 1
在启动windows2000的时候,在boot.ini当中加入/3GB
或者在windows2003的时候,在boot.ini当中加入 /4GB
可以减少一些服务占据的空间,释放最大的空间给用户使用。
这些开关给予每个应用程序3GB的空间,只保留1G的空间给系统使用

详细信息可以看这两个说明:
http://www.brianmadden.com/content/content.asp?ID=69
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dngenlib/html/msdn_ntvmm.asp
qhfu 2005-10-27
  • 打赏
  • 举报
回复
用new分配这么大的内存根本没有意义。默认windows堆大小是 1M
寻开心 2005-10-27
  • 打赏
  • 举报
回复
这个都是理论上的,
具体实际当中,系统当中有很多的应用程序,他们也会占据一些空间的
到底能够用多少,那就不能定论了
cholera 2005-10-27
  • 打赏
  • 举报
回复
你再换个4G的内存看看, 或是你多试几次, 把分水岭找到看看, 然后再分析
寻开心 2005-10-27
  • 打赏
  • 举报
回复
这个和操作系统有关系
在32位系统下理论上是4G
在windows环境下,是2G,特殊处理后,可以到3G
windows的内存管理系统正常情况下保留了2G,用户可以用的空间是2G
但是通过设置,系统可以再让出1G的空间
这个就是win32的最大限制了

具体的电脑和能不能分配,看的是‘物理内存 + 虚拟内存’只要空间大就可以分配
percyzhang 2005-10-27
  • 打赏
  • 举报
回复
我的虚拟内存设置到最大4G,物理内存为2G,
unsigned int a=1500000000;
BYTE* d=new BYTE[a];
就是出现异常

有没有申请大内存的方法呢
xiaocai0001 2005-10-27
  • 打赏
  • 举报
回复
这个?
不太清楚了~

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧