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

whucv 2012-09-22 01:15:33
int array1[2288][2288];//int 4字节,总共16M多,为什么会分配失败,打开图像30多M都没问题呢
...全文
166 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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
  • 打赏
  • 举报
回复
在主函数外面可以,但在函数里面是不可以的,栈区默认只有这么多

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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