| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 39345 人关注过本帖, 1 人收藏
标题:数组最大可以申请多大长度
只看楼主 加入收藏
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
结帖率:96.08%
收藏(1)
已结贴  问题点数:20 回复次数:9 
数组最大可以申请多大长度
为什么在函数中定义一个数组和定义一个全局的数组可以申请的空间的大小不一样?


在函数中不能定义一个太大的数组,否则程序无法执行。
但是作为全局变量就可以。

我大概能猜到是为什么,但是希望大神能给个精确的解释。
搜索更多相关主题的帖子: 空间 
2013-06-09 22:48
没事学学
Rank: 2
等 级:论坛游民
帖 子:77
专家分:46
注 册:2013-3-28
收藏
得分:2 
为什么呢
2013-06-09 22:51
嗜血老妖
Rank: 3Rank: 3
来 自:江西
等 级:论坛游侠
威 望:2
帖 子:102
专家分:163
注 册:2013-3-25
收藏
得分:10 
数组是静态分配的空间,应该是在栈上,数组你想分配100万个元素的话,如果是char数组,占用的空间就是1M,如果这个值超过了允许的栈空间大小,肯定会出错的。
栈空间视不同的机器不同,至于具体是在编译环境中设置还是在操作系统中设置,我就不知道了。
另外,最好不要用这么大的数组,遍历、修改操作都不方便,性能太低。

仗剑走天涯,网络论英雄。
2013-06-09 22:59
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:6 
函数体内的数组存在于stack,函数体外的或者用static声明的数组存在于data,变量存储的内存空间不同,所以大小限制自然不同

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2013-06-10 07:35
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
回复 3楼 嗜血老妖
能给个这方面的建议么?



学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-06-10 22:57
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
waitting... ...

学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-06-10 23:26
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
不明白你到底想要什麽建议,其实上面3、4楼的解釋都不错了啊,知道原理了还跟人要建议?

授人以渔,不授人以鱼。
2013-06-10 23:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
局部非静态的数组,空间在程序的栈上分配,不同平台的栈大小不同:SunOS/Solaris是8M,Linux是10M,Windows是1M,AIX是64M,都是可以调整的。

C99所谓的动态数组,其实分配在栈上,对那些Windows之外的平台,栈尺寸都比较大,所以不觉得有什麽,一般足够,但微软并不认为这是好主意,与其调整栈尺寸,不如在堆上分配更彻底(想象一下运行时接收了不合理的数组尺寸将有什麽结果就知道了,那已经在程序可控范围之外,超越了C是编译型语言的性质,事实上为了防这种错误,迫使程序员为此要写更多的即时检测代码),所以它不接纳这种标准(VC系列都不支持动态数组)。一般的建议,大数组,在堆上分配。

一般,在Unix-like平台,栈的大小不是由程序自己来控制的而是由环境变量来控制的,所以就不能通过设置编译器(像gcc)的任何编译标志来设置栈的大小;在windows平台下,栈的大小的信息是包含在可执行文件中的。它可以在Visual C++的编译过程中设置,但是在gcc中是不可行的。也可以用Microsoft提供的一个叫作:“editbin.exe”程序来直接修改可执行文件的栈的大小。


[ 本帖最后由 TonyDeng 于 2013-6-11 00:25 编辑 ]

授人以渔,不授人以鱼。
2013-06-11 00:20
sophys
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2014-6-13
收藏
得分:0 
程序代码:
#include<stdio.h>
#define N 100000000 //1亿
int arr[N];//   在堆上可以 

int main(int argc,char**argv)
{
    int b[N];//在程序栈上,要报段错误的,如果N在百万级别以下,还是可以得,也就是在栈上分配空间是有限的
    static int a[N];//在堆上,可以
    return 0;        
}


挖了和坟

[ 本帖最后由 sophys 于 2014-6-13 11:01 编辑 ]
2014-06-13 10:59
汪小贱
Rank: 2
等 级:论坛游民
帖 子:24
专家分:36
注 册:2017-1-23
收藏
得分:0 
回复 9楼 sophys
为什么用全局变量定义数组的长度后,必须还是用全局变量来定义数组?
2017-01-23 15:52
快速回复:数组最大可以申请多大长度
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023885 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved