随笔 - 62  文章 - 96  trackbacks - 0
<2006年1月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿(7)

随笔分类(66)

随笔档案(62)

文章分类(31)

文章档案(32)

友情链接

最新随笔

积分与排名

  • 积分 - 233522
  • 排名 - 108

最新评论

阅读排行榜

评论排行榜

最近遇到了一个问题:

在函数内定义了一个一百万的数组。

编译、连接没问题,但执行时就会提示堆栈溢出。

但定义全局变量却没有问题。

谁能给我解释一下为什么?

posted on 2006-05-06 23:32 beyonlin 阅读(11851) 评论(5)  编辑 收藏 引用 所属分类: C++之路

FeedBack:
# re: 数组最大长度问题 2006-05-07 08:39 漂舟
在函数内定义,数组是产生在栈中,有大小限制,具体大小,应该和编译器或设置有关,默认的好像是1MB,
定义成全局,是在堆中产生,所以能通过。  回复  更多评论
  
# re: 数组最大长度问题 2006-10-25 13:22 Asp
全局变量也有限制吧,在MS VC++6.0里面定义int array[2147483647];是允许的,但是长度定义成2147483648的话,编译的时候就会报错:
error C2118: negative subscript or subscript is too large
Dev C++和其他的编译器里面,我就不知道了,没有试过……  回复  更多评论
  
# re: 数组最大长度问题 2006-10-26 00:12 beyonlin
2147483648对于int已经溢出,当然会报错。
int array[2147483647]在MS VC++6.0下虽然不报错,但会发生运行错误。
并且int array[2147483647]在VS.net 2005下是编译不过的。
我认为全局数组最大的内存可能是2147483647 bytes。
即int array[2147483647/4]或double array[2147483647/8]。  回复  更多评论
  
# re: 数组最大长度问题 2006-10-31 19:19 Asp
这个就不知道了,没有仔细研究过……
不过可能和sizeof()有关,a[i]=a+sizeof(type)*i,而i取2147483647的话就越界了吧,因为指针也是4字节,所以可能sizeof()返回的长度和int一样……
如果是这样的话,那就真的最大只能到2147483647/sizeof(type)了……  回复  更多评论
  
# re: 数组最大长度问题 2008-12-19 21:38 helloworld
超过1M 具体1024*1000差不多。应该在堆中或进程数据区分配。

按照这个原理,全局变量在进程数据区,所以不会出错。
局部变量的话使用new在堆中分配。  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理