STM32局部变量的数组最大能到多少?
2017-11-12 07:42
417 查看
当在一个函数中声明一个较大的局部数组变量时,程序可以编译通过,但运行时,老是进入hardfaulthandler,导致出现改问题的原因可能是栈溢出。因为局部变量是存放在栈区的,而全局变量在全局区(静态区),如果栈区较小,会产生溢出。
解决这种问题的方法:
方法1:启动文件里面对栈的大小有固定的值。函数里面的数组是在调用该函数的时候,才给你分配空间。将启动文件下的堆栈改大
Stack_Size EQU 0x00000400 。
Stack Size,一般小工程0X400足够,大工程才设置0X1000就够用,所以默认无需设置太大。
方法2:用静态数组代替普通局部数组。
方法3:数组过大,栈溢出了,有可能覆盖了其他全局变量的值。如果使用很大的数组,可以定义成一个全局变量。如果使用的有os。就使用内存管理。
=================================================================================================
堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。{堆是指程序运行时申请的动态内存,而栈只是指一种使用堆的方法(即先进后出)。}
栈是先进后出的,但是对于堆而言却没有这个特性,两者都是存放临时数据的地方。 对于堆,我们可以随心所欲的进行增加变量和删除变量,不要遵循什么次序,不管大小,只要你喜欢
*栈,用于存放局部变量,局部数组等
*堆,用于保存new 和malloc这些自定义的内存变量;
*全局静态区用于保存全局变量和静态变量;
*字符常量区,用于保存字符串;
*代码区,用于保存程序的二进制代码;
http://blog.csdn.net/qq_30594349/article/details/52843781
解决这种问题的方法:
方法1:启动文件里面对栈的大小有固定的值。函数里面的数组是在调用该函数的时候,才给你分配空间。将启动文件下的堆栈改大
Stack_Size EQU 0x00000400 。
Stack Size,一般小工程0X400足够,大工程才设置0X1000就够用,所以默认无需设置太大。
方法2:用静态数组代替普通局部数组。
方法3:数组过大,栈溢出了,有可能覆盖了其他全局变量的值。如果使用很大的数组,可以定义成一个全局变量。如果使用的有os。就使用内存管理。
=================================================================================================
堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。{堆是指程序运行时申请的动态内存,而栈只是指一种使用堆的方法(即先进后出)。}
栈是先进后出的,但是对于堆而言却没有这个特性,两者都是存放临时数据的地方。 对于堆,我们可以随心所欲的进行增加变量和删除变量,不要遵循什么次序,不管大小,只要你喜欢
*栈,用于存放局部变量,局部数组等
*堆,用于保存new 和malloc这些自定义的内存变量;
*全局静态区用于保存全局变量和静态变量;
*字符常量区,用于保存字符串;
*代码区,用于保存程序的二进制代码;
http://blog.csdn.net/qq_30594349/article/details/52843781
相关文章推荐
- [导入]★ 你知道JavaScript里数组的最大长度允许多少吗 ★
- 【算法证明含证明过程】数组左部分中的最大值减去右部分最大值的绝对值,最大是多少?
- codeblocks数组最大能开到多少
- 用数组求一位数组中的最大值,最小值和平均分,并求出有多少个数超过平均分
- 堆的数据结构能够使得堆顶总是维持最大(对于大根堆)或最小(对于小根堆),给定一个数组,对这个数组进行建堆,则平均复杂度是多少?如果只是用堆的 push 操作,则一个大根堆依次输入 3,7,2,4,1,5,8 后,得到的堆的结构示意图是下述图表中的哪个?
- hdu 5289 Assignment(给一个数组,求有多少个区间,满足区间内的最大值和最小值之差小于k)
- House Robber 非负数组,相邻不能相加,求最大的和是多少(动态规划)
- 用数组求一组数的最大值、最小值和平均值,并求有多少个数超过平均数
- hdu 5289 Assignment(给一个数组,求有多少个区间,满足区间内的最大值和最小值之差小于k)
- J2ME支持的数组最大长度是多少?创建一个164025大的int型数组报内存溢出异常!
- java数组的最大长度是多少?
- 给一个数组,求a[i]<a[j]的情况下,j-i的最大值是多少,要求用O(n)时间复杂度
- java数组的最大长度是多少?
- 最大和子数组与最大积子数组(Largest Sum Contiguous Subarray & Maximum Product Subarray)
- 在Z-stack中,我们调用数据发送函数,可以发送的最大字节数即ASDU最大是多少呢?
- 返回一个二维整数数组中最大子数组的和(圆柱形)
- 简谈最大子数组和
- 首尾连接的二维数组中连续子数组的最大和
- 数组最大子数组和
- Windows上的单个进程所能访问的最大内存量是多少?它与系统的最大虚拟内存一样吗?