在C语言中全局数组与局部数组的区别

全局数组存储在静态区,局部数组存储在栈区。栈的大小通常限制为2MB,适合小规模的局部变量。当需要大容量数组时,应使用全局变量。内存分为栈、堆、全局/静态存储区、常量存储区和代码区,不同类型的变量在不同的区域内分配。动态内存分配涉及栈和堆,静态分配包括全局和静态变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

全局数组与局部数组最本质的区别在于其两者的储存位置不一样.

对于全局变量而言,储存位置是在内存中的静态区。

而对于局部变量而言,储存位置则是在栈区(stack)。

关于程序内存分配的相关知识会在文章结尾涉及到;

对于c语言,一个静态数组能有多大,取决于剩余内存的空间,也就是它所在区的大小;

在Windows下,栈的大小为2M,也就是1024*1024*2 = 2097152个字节。而一个int类型的变量则占2个或4个字节。所有我们在程序中声明局部变量时(在栈区),最好不好超过int[200000]的内存变量。

总之,当程序需要声明一个超过十万级的变量时,最好放在main函数外面,作为全局变量去使用。

这里只列出关于C/C++中的程序内存分配:

内存分为5个区,分别为栈区、堆区、全局/静态存储区、常量存储区、代码区。

静态内存分配:编译时分配。包括:全局、静态全局、静态局部三种变量;

动态内存分配:运行时分配。包括:栈(stack):局部变量。(malloc、realloc、free函数)

变量的内存分配:

栈区:是指那些由编译器需要的时候分配,不需要的时候自动清除的变量所在的储存区。栈内存分配运算内置与处理器的指令集中,效率高但是分配内存空间有限。

堆区:是指那些由程序员手动分配释放的储存区。

静态储存区(static):全局变量和静态变量的储存是放在一起的,其中初始化的全局变量和静态变量在一个区域,这块空间当程序运行结束后由系统释放。

常量储存区(const):常量字符串以及const修饰的全局变量也储存在常量区,而const修饰的局部变量依然在栈上。

程序代码区:存放源程序的二进制代码。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值