一个其他人写的项目文件,在其中的一个.c文件中定义了一个超大的数组,static float LaserPointArray[201][6] = {0}; 这个数组变量属于静态变量 ,静态变量、全局变量是存储在堆区的。在启动文件中堆区的大小是定义好的。
Heap_Size EQU 0x00000200 这样算来堆区的大小明显不满足需要的空间大小。但是程序不报错,并且能运行。为什么这样?另外堆栈都是属于RAM的,而RAM的空间大小是可以看到的。如下图所示:
,具有65536个字节大小,因此在启动文件中将
Heap_Size EQU 0x00000200通过更改0x00000200数据的大小是不是就可以直接更改堆区大小。堆区+栈区是不是就是RAM的空间大小,还是说堆区+栈区<=RAM的空间大小。理解这个概念才可以知道手动更改堆区大小,最大可以更改为多大。
如果内存溢出,MDK一般是不报警的,RAM的空间大小65536个字节减去起始文件中,堆区和栈区的大小,剩余的空间大小就是静态区的大小。可以这样理解吗?
一周热门 更多>