关于在函数中定义⼤数组(局部变量)所导致的问题
函数中定义⼤数组(局部变量)的问题
今天调程序时,在函数内部定义了两个较⼤的数组:float a[300],float[300],编译⽆错也⽆警告,
但运⾏时程序会出错,像是跑飞的样⼦,后来我将这两个⼤数组放到函数外(全局变量),则就正常了。
后来我百度“函数中定义⼤数组”,说是这造成了栈溢出,还建议不要在函数中使⽤较的数组。
我⽤的是DSP处理器,但我估计在其他处理器上也是类似的吧,包括PC机。
暂时就这样理解吧,关于内存的存储分配问题以后再细看吧。
下⾯这是来⾃百度知道⼀段解释:
⼀个由C/C++编译的程序占⽤的内存分为以下⼏个部分
1、栈区(stack)― 由编译器⾃动分配释放 ,存放函数的参数值,局部变量的值等。其操作⽅式类似于数据结构中的栈。
2、堆区(heap) ― ⼀般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配⽅式倒是类似于链表,呵呵。
3、全局区(静态区)(static)―,全局变量和静态变量的存储是放在⼀块的,初始化的全局变量和静态变量在⼀块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另⼀块区域。 - 程序结束后有系统释放
定义数组初始化4、⽂字常量区 ―常量字符串就是放在这⾥的。 程序结束后由系统释放
5、程序代码区―存放函数体的⼆进制代码。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论