定义一个很大的数组(为什么定义一个过大的数组或容器,应当把它把它定义为全局变量为宜)

本文目录
为什么定义一个过大的数组或容器,应当把它把它定义为全局变量为宜
因为全局变量是存储在静态存储区分配的,这个空间很大
局部变量是在栈空间上分配的,栈空间没那么大,太大了会溢出楼上正解,无须再答,楼主结贴吧!!!
可以定义一个无限大的数组吗
C语言支持定义一个不显式定义长度的数组,即通过初始化数据来分配数组长度。
比如int a = {1,2,3,4,5}; 数组a的长度没有显式给出,由于有5个初始化数据,所以分配空间长度为5个int型。
但是无论如何定义,数组的长度都是固定的,在定义的时候就已经分配好空间,从这个角度上C语言无法定义无限长的数组。但很多实际应用中又事先无法确定数组的长度,对于这类情况,一般有两种方法可以使用。
1 由malloc和realloc两个函数,分配动态空间,随时按需改变数组的最大长度。
通过下面例子来理解该方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include 《stdio.h》
#include 《stdlib.h》
int main()
{
int size=100;//最初为100个元素空间。
int *a = NULL;
int i = 0;
a = malloc(sizeof(int) * size);
if(a == NULL) return -1;
while(scanf("%d", a+i) == 1)//循环向a中输入数据,直到输入非数值字符为止
{
i++;
if(i == size)//数组空间不足
{
size *=2; //将数组空间扩大二倍, 也可以改用size+=100;之类的操作,使size每次增加固定值。
a=realloc(a,size);//分配新的空间
if(a==NULL)
{
return -1;//这种情况下运行载体(如PC)内存不足以提供,中断程序。
}
}
}
if(a) free(a);//对申请的内存进行释放。
return 0;
}
从以上程序可以看到,这种方式的原理就是每当数组空间不足时,利用函数realloc分配一段新的内存空间以增大数组长度。 直到占满所有剩余空间。
如果到占满所有空间还是无法存下数据,那么是硬件无法支持了。
所以这种方法可以做到软件意义上的无限大数组空间。
但是这种方法代码量比较大,而且需要频繁的进行内存的分配,如果实现知道数据的最大可能规模,那么可以用另一个方法。
2 事先知道数据的最大规模,比如统计一个班的分数时,一个班最多不超过百人,那么可以直接定义一个长度为100的数组,或者保险起见,定义一个长度为1000的数组,并对其操作。这样在操作范围内,这个就是一个“无限长”的数组了。
程序有内存管理了怎么定义一个大的数组
数组只是一个语法概念,可以认为你是要分配一段连续的内存,在应用层有2种方式:全局变量的方式,在函数外声明,最大应该不能超过4G Byte(32bit寻址最大值),int就除与4,doubel再除2局部变量的方式,在函数内声明,属于栈内存,就更小,确实跟操作系统和C库相关,进程都有栈限制的,可以输入命令ulimit查看,默认也就10K左右,当然你可以设置更大。不会有数专门说这个数组大小的问题,它涉及的知识点会,栈内存,data 段,以这些为关键字去看,整理理解吧。
C语言中如何定义一个很大的全局数组
定义全局数组跟定义全局变量是一样的,下面举例来具体说明如何定义全局数组:
#include《stdio.h》
int a; // 定义一个int类型的全局数组,数组中包含100个元素,每个元素类型都是int型
void main()
{
int i;
for(i=0; i《100; i++)
a = i; // 对全局数组进行初始化
}
如何定义一个大数组
直接定义的话,是有限制的,因为直接定义是放在栈内存中的,
而栈内存是有限的,
所以,大量数据定义的话,应该放在堆内存中
定义成静态变量,或者new出空间来放数组
char *p=new char
const int temp
上面两种方法都是可以的,根据具体情况去用
不过,用new出来的一定要记得释放

更多文章:
activitythread工作原理(ViewModel的原理)
2026年5月26日 05:00
maven配置文件放哪里(maven打包时如何把包下面的XML配置文件也包含)
2025年9月12日 17:30
compensation 单词(compensation同义词)
2025年9月10日 19:15
mentality是什么意思(victim mentality是什么意思)
2026年1月13日 09:00
readprocessmemory(U盘出现仅完成部分的ReadProcessMemory 或WriteProcessMemory请求)
2025年10月5日 22:00
power query拆分列的拆分依据(在wps或excel里面,在一段文本里面把两个数字按大小挑出来)
2025年12月4日 07:15
according to legend(英语作文关于历史人物 少于100字数)
2026年7月3日 01:15
java数组的长度怎么看(java中如何判断一个数组的长度呢比如我申请了一个数组int [] arr = new int[8];)
2025年6月23日 17:30















