堆:先进先出 FIFO:First in first out 手动分配、释放
栈:后进先出 FILO:First in last out 自动分配释放
裸机情况下使用动态内存heap:在启动文件(startup_stm32f103xe.s)中调整:
Heap_Size EQU 0x00000200
然后用malloc()获取
栈:后进先出 FILO:First in last out 自动分配释放
裸机情况下使用动态内存heap:在启动文件(startup_stm32f103xe.s)中调整:
Heap_Size EQU 0x00000200
然后用malloc()获取
在RT-Thread中,如果在rtconfig.h中定义了RT_USING_HEAP,在rt_hw_board_init()函数中会有一段初始化代码
#ifdef RT_USING_HEAP
rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END);
#endif
API:
int *P;
p=rt_malloc(10)
rt_free(p)//rt_malloc,rt_free要配合使用
rt_memset(p,1,1)//给P的前1个字节赋值为1
mem_check(p,1,1)//检查是否赋值成功
rt_realloc(20);//发现获取10字节的内存不够用,重新获取内存块为20字节,此时P为20字节
rt_calloc(10,4)//获取10*4的内存,10块内存区域,每块大小为4
warning:如果使用完动态内存之后不释放(rt_free),那么可能会导致内存泄漏、溢出。
获取系统使用的最大head:在finshshell中输入free指令;
warning:如果使用完动态内存之后不释放(rt_free),那么可能会导致内存泄漏、溢出。