为什么int arrayq[2288][2288]失败

whucv 中科院 运维工程师/系统管理员/网络管理员  2012-09-22 01:15:33
int array1[2288][2288];//int 4字节,总共16M多,为什么会分配失败,打开图像30多M都没问题呢
...全文
112 点赞 收藏 5
写回复
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
LogicTeamLeader 2012-09-30
很好,受教了。
[Quote=引用 4 楼 的回复:]
引用楼主 的回复:
int array1[2288][2288];//int 4字节,总共16M多,为什么会分配失败,打开图像30多M都没问题呢


注意程序的栈区间和堆空间。
函数的参数,局部变量都是栈空间,栈空间都是不大的,编译器可以设置,大约就几个M级别的。
用户动态申请的内存时在堆区间上的,C中用malloc,c++中用new来申请。
你这样写int array1[2288]……
[/Quote]
回复
huangxy10 2012-09-26
[Quote=引用楼主 的回复:]
int array1[2288][2288];//int 4字节,总共16M多,为什么会分配失败,打开图像30多M都没问题呢
[/Quote]

注意程序的栈区间和堆空间。
函数的参数,局部变量都是栈空间,栈空间都是不大的,编译器可以设置,大约就几个M级别的。
用户动态申请的内存时在堆区间上的,C中用malloc,c++中用new来申请。
你这样写int array1[2288][2288];一定是局部变量,超过限制了。
在堆上能够申请到的空间和操作系统有关。
32位的操作系统用户最大可申请2G,及时你插了4G的内存条也没用。
64位的操作系统不受限制,有虚拟内存的帮助几乎是想申请多少申请多少。
不过申请多了,速度会很慢,因为内存和硬盘调入调出还是很费时间的。
说多了,啰嗦了。
回复
Qyee16 2012-09-22
vs的默认栈空间是 4M吧。

建议使用new...........
回复
RiqueZhang 2012-09-22
LZ,你申请的是栈内存,正如2楼所述,VS的默认栈空间是4M,所以你申请那么多必然失败,请用new
回复
DeDeWo 2012-09-22
在主函数外面可以,但在函数里面是不可以的,栈区默认只有这么多
回复
发动态
发帖子
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
社区公告
暂无公告