项目场景:
最近有个案子(MCU:STM32F103VCT6)需要定制个小功能,需要用malloc分配大量的空间。本来是没什么,但是无意中发现,KEIL MDK编译时,malloc分配的空间已经超过预设的大小也不报错。后面发现和自己的使用也有关系。在这边记录一下,给有碰到类似问题的网友们一些参考。
问题描述:
先看启动文件。这里堆分配的大小是0x2000,即8K。
Heap_Size EQU 0x00002000
AREA HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem SPACE Heap_Size
__heap_limit
在代码里,我创建了一个uint16的数组,数量是4500。所以大小是9000,已经溢出了。
U8 TagGet(void)
{
U8 statue=FALSE;
U16 *pbuf;
U16 cnt,i,j;
U16 const len = 4500;
pbuf = (U16 *)malloc(sizeof(U16)*len