全局数组与局部数组最本质的区别在于其两者的储存位置不一样.
对于全局变量而言,储存位置是在内存中的静态区。
而对于局部变量而言,储存位置则是在栈区(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修饰的局部变量依然在栈上。
程序代码区:存放源程序的二进制代码。