C语言中如何计算一个数组内存空间占内存多少空间

欢迎加入我们,一同切磋技术。 &
用户名: &&&
密 码: &
共有 29248 人关注过本帖
标题:数组最大可以申请多大长度
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:731
专家分:1546
结帖率:96%
&&已结贴√
&&问题点数:20&&回复次数:9&&&
数组最大可以申请多大长度
为什么在函数中定义一个数组和定义一个全局的数组可以申请的空间的大小不一样?
在函数中不能定义一个太大的数组,否则程序无法执行。
但是作为全局变量就可以。
我大概能猜到是为什么,但是希望大神能给个精确的解释。
搜索更多相关主题的帖子:
等 级:论坛游民
帖 子:77
专家分:46
来 自:江西
等 级:论坛游侠
帖 子:102
专家分:163
&&得分:10&
数组是静态分配的空间,应该是在栈上,数组你想分配100万个元素的话,如果是char数组,占用的空间就是1M,如果这个值超过了允许的栈空间大小,肯定会出错的。
栈空间视不同的机器不同,至于具体是在编译环境中设置还是在操作系统中设置,我就不知道了。
另外,最好不要用这么大的数组,遍历、修改操作都不方便,性能太低。
仗剑走天涯,网络论英雄。
等 级:千里冰封
帖 子:1555
专家分:10000
函数体内的数组存在于stack,函数体外的或者用static声明的数组存在于data,变量存储的内存空间不同,所以大小限制自然不同
经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq。
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:731
专家分:1546
回复 3楼 嗜血老妖
能给个这方面的建议么?
学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Black Cat&&&&&&Hello Tomorrow~
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:731
专家分:1546
waitting... ...
学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Black Cat&&&&&&Hello Tomorrow~
等 级:贵宾
威 望:304
帖 子:25793
专家分:48814
不明白你到底想要什麽建议,其实上面3、4楼的解釋都不错了啊,知道原理了还跟人要建议?
授人以渔,不授人以鱼。
等 级:贵宾
威 望:304
帖 子:25793
专家分:48814
局部非静态的数组,空间在程序的栈上分配,不同平台的栈大小不同:SunOS/Solaris是8M,Linux是10M,Windows是1M,AIX是64M,都是可以调整的。
C99所谓的动态数组,其实分配在栈上,对那些Windows之外的平台,栈尺寸都比较大,所以不觉得有什麽,一般足够,但微软并不认为这是好主意,与其调整栈尺寸,不如在堆上分配更彻底(想象一下运行时接收了不合理的数组尺寸将有什麽结果就知道了,那已经在程序可控范围之外,超越了C是编译型语言的性质,事实上为了防这种错误,迫使程序员为此要写更多的即时检测代码),所以它不接纳这种标准(VC系列都不支持动态数组)。一般的建议,大数组,在堆上分配。
一般,在Unix-like平台,栈的大小不是由程序自己来控制的而是由环境变量来控制的,所以就不能通过设置编译器(像gcc)的任何编译标志来设置栈的大小;在windows平台下,栈的大小的信息是包含在可执行文件中的。它可以在Visual C++的编译过程中设置,但是在gcc中是不可行的。也可以用Microsoft提供的一个叫作:“editbin.exe”程序来直接修改可执行文件的栈的大小。
[ 本帖最后由 TonyDeng 于
00:25 编辑 ]
授人以渔,不授人以鱼。
等 级:新手上路
程序代码:
#include&stdio.h&
//<font color=#亿
int arr[N];//&&&在堆上可以
int main(int argc,char**argv)
&&& int b[N];//在程序栈上,要报段错误的,如果N在百万级别以下,还是可以得,也就是在栈上分配空间是有限的
&&& static int a[N];//在堆上,可以
&&& return <font color=#;&&&&&&&&
[ 本帖最后由 sophys 于
11:01 编辑 ]
等 级:论坛游民
帖 子:12
专家分:14
回复 9楼 sophys
为什么用全局变量定义数组的长度后,必须还是用全局变量来定义数组?
版权所有,并保留所有权利。
Powered by , Processed in 0.052726 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights ReservedC语言中数组在内存中占用一段连续的存储空间,它的首地址由什么表示 在线等-学网-中国IT综合门户网站-提供健康,养生,留学,移民,创业,汽车等信息
> 信息中心 >
C语言中数组在内存中占用一段连续的存储空间,它的首地址由什么表示 在线等
来源:互联网 发表时间: 13:42:31 责任编辑:王亮字体:
为了帮助网友解决“C语言中数组在内存中占用一段连续的存储空间,它的首地址由什么表示 在线等”相关的问题,学网通过互联网对“C语言中数组在内存中占用一段连续的存储空间,它的首地址由什么表示 在线等”相关的解决方案进行了整理,用户详细问题包括:RT,我想知道:C语言中数组在内存中占用一段连续的存储空间,它的首地址由什么表示 在线等,具体解决方案如下:解决方案1:首地址由数组名表示,也是0元素的地址。若有: int a[10];则:a与&a[0]都表示a数组所占存储空间的起始地址解决方案2:
举个列子形象点 比如定义一个数组a[10] 那么他的首地址就是a[0]的地址 不知道阁下学过指针没有 其实就是个指针啊
解决方案3:
数组的首地址就是数组名,比如有数组a[10],则a就是该数组的首地址。
3个回答2个回答1个回答2个回答5个回答4个回答4个回答1个回答3个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答
相关文章:
最新添加资讯
24小时热门资讯
Copyright &#169; 2004- All Rights Reserved. 学网 版权所有
京ICP备号-1 京公网安备02号

我要回帖

更多关于 c语言申请内存空间 的文章

 

随机推荐