堆分配内存最大是多少

dongliang_nuaa 2009-03-06 08:00:23
栈最大好像是1M还是2M,那么堆分配最大能多少啊,64000KB可以吗
...全文
1300 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
monster2002 2009-03-16
  • 打赏
  • 举报
回复
这个不同的操作系统是不一样的。
windows 的malloc我不太熟悉。
在unix下在堆上malloc是glibc库提供的,根据程序编译时建立的段模型来分配堆上的内存。
我在aix上用malloc 加上 maxdata 参数可以malloc到2个GB的内存。
yyyapple 2009-03-16
  • 打赏
  • 举报
回复
取决于剩余连续虚地址空间大小
redleaves 2009-03-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dongliang_nuaa 的回复:]
这么说64000KB也就是大概64M是可以的吧,
[/Quote]
基本上可以认为这种分配一定成功.当然,这是要在你的内存资源没有被耗尽之前.
Win32在正常情况下,4G内存里有2G分配给用户进程,有2G给系统用.用户进程的东西像堆,栈,CODE等等都是在2G用户空间里的.用户可分配的内存总量一般有近2G,但单独一个可分配的内存块的大小通常不可能达到这个数量级,系统会根据当前进程的地址使用情况来决定.
  • 打赏
  • 举报
回复
理论上2GB空间可以使用,但是不一定能分到那么多
zhan1094 2009-03-08
  • 打赏
  • 举报
回复
记得是1G
jackzhhuang 2009-03-08
  • 打赏
  • 举报
回复
其实windows会以预留的方式分配较大的堆内存,虽然分配给你了,但若是内存紧张,还是可能在使用崩溃的。
kostion 2009-03-07
  • 打赏
  • 举报
回复
理论上4个G,但是实验过,能达到3个多G
sphinxlike 2009-03-07
  • 打赏
  • 举报
回复
一般来讲,32位系统,堆内存可以达到4G的空间;但是对于栈来讲,都有限制,VC6中,默认的栈空间大小为1M
deerwin1986 2009-03-07
  • 打赏
  • 举报
回复
因为可以和硬盘交换 虚拟内存等机制 所以理论上可以达到将近4个G 当然要刨去OS的部分...
yangch_nhcmo 2009-03-07
  • 打赏
  • 举报
回复
写个程序自己测试一下

#include <stdio.h>
#include <malloc.h>

int main()
{
int m = 0;
while (malloc(1<<20)) //每次分配1MB
m++;

printf("malloc total: %d", m);
return 0;
}

zhongyuanceshi 2009-03-06
  • 打赏
  • 举报
回复
用malloc函数分配大小,比如1G,2G.再不断调试,调试出错了估计就是最大了。不知道这样对不对
arong1234 2009-03-06
  • 打赏
  • 举报
回复
2G决无可能,总共就2G,被各种各样的东西早就占了很多,怎么可能还有2G
64M虽然说不上大数目,但是如果他程序频繁分配释放很多,不一定成功,这需要“连续地址空间”的

[Quote=引用 5 楼 dongpy 的回复:]
引用楼主 dongliang_nuaa 的帖子:
栈最大好像是1M还是2M,那么堆分配最大能多少啊,64000KB可以吗

堆内存理论上能分配到2G以上。

64000KB没问题。
[/Quote]
xuguod20042576 2009-03-06
  • 打赏
  • 举报
回复
应该是没问题的
dongpy 2009-03-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 dongliang_nuaa 的帖子:]
栈最大好像是1M还是2M,那么堆分配最大能多少啊,64000KB可以吗
[/Quote]
堆内存理论上能分配到2G以上。

64000KB没问题。
dongliang_nuaa 2009-03-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 redleaves 的回复:]
这要看进程中可用的连续地址还有多长.WIN32下,一般也就1G左右.
[/Quote]
这么说64000KB也就是大概64M是可以的吧,
redleaves 2009-03-06
  • 打赏
  • 举报
回复
这要看进程中可用的连续地址还有多长.WIN32下,一般也就1G左右.
higoalhwl 2009-03-06
  • 打赏
  • 举报
回复
堆的大小受限于计算机系统中有效的虚拟内存
beyonld 2009-03-06
  • 打赏
  • 举报
回复
32位操作系统支持“虚存”,内存用完了,可以用硬盘空间代替

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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