在高精度加法代码中,第6,7行的数组是放在main函数外的:
我第一次写的时候,将数组放到了main函数里面:
这样运行起来结果是错误的:
原因:
-
先介绍一下栈区(stack),堆区(heap),数据区(data seg)和代码区。
- 栈区:由操作系统自动分配释放,存放函数的参数值,局部变量的值;当不需要时系统会自动清除。
- 堆区:由new分配的内存块,不由编译器管,由应用程序控制(相当于程序员控制)。如果程序员没有释放掉,程序结束后,操作系统会自动回收。
- 数据区:也称全局区或者静态区,存放全局的东西类似全局变量。
- 代码区:存放执行代码的地方,类似if else,while,for这种语句。
-
在main函数里面的数组是开在栈区(stack),在函数外面的是开在数据区的。栈区的内存比较小,所以当数组非常大的时候,就会报错。假如把数组放在数据区就不会出现这个问题,因为数据区的内存很大。
-
也就是说,在main函数外面开一个数组,他的内存分配在数据区里;如果在main函数内部开数组,内存分配在栈区内。一般来说栈区的内存是比较小的,所以平常开一些小一点的数组是没问题的;但如果题目要求的数组比较大,那就会出现爆出的问题,程序无法访问内存就会出错;相对的,数据区的内存较大,所以开数组开在数据区/main函数外面,就不易出现这样的问题。