|
测试环境:STM32+IAR6.4 堆区大小设置为0x1000(默认值)。 变量定义: char *p=NULL; char *p2=NULL; 1. 申请内存大小超过设置值 p = (char *)malloc(sizeof(char)*5090); malloc返回NULL,使用这段内存是会出错(硬件错误)。 2.申请两段内存,每段不超过设定值,但总和超过设定值。 p = (char *)malloc(sizeof(char)*3090); if(p== NULL) { printf("malloc error1\r\n"); } p2 = (char *)malloc(sizeof(char)*3090); if(p2== NULL) { printf("malloc error2\r\n"); } p2为NULL,使用时会出错。 3.申请一段内存,使用完毕后释放掉,然后再申请一段内存 p = (char *)malloc(sizeof(char)*3090); if(p== NULL) { printf("malloc error1\r\n"); } ... free(p); p2 = (char *)malloc(sizeof(char)*3090); if(p2== NULL) { printf("malloc error2\r\n"); } ... free(p2); 使用正常。 申请内存,使用完毕后要释放。 IAR设置堆栈大小 option->Linker -> Config -> Override default ->Edit。 如有错误,欢迎指正,欢迎拍砖! |
| 那肯定的。老申请不释放那就用完了。 |
不错 不错 |
| 谢谢分享! |
| 谢谢分享! |
| 请教一个问题,设定堆区的大小后,系统启动的时候不需要作跟堆相关的初始化,就可以调用malloc()函数来分配动态内存吗? |
| 谢谢分享! |
| 直接使用系统malloc会有内存碎片吧? |
STM32
超强工具——STM32CubeMX 你会用吗?
集结出发! STM32全国研讨会系列之一:ST智能门铃中国首秀
关于STM32启动文件的几个小问题
【银杏科技ARM+FPGA双核心应用】STM32H7系列35——USB_VCP_FS
【银杏科技ARM+FPGA双核心应用】STM32H7系列28——USB_HID
粉丝分享 | 图说CRC原理应用及STM32硬件CRC外设
STM32L151进入低功耗,并由RTC唤醒的故事
[转]stm32控制NFC模块(PN532)源码(P2P,模拟卡,读写卡等
STM32G070RB+LVGL移植
微信公众号
手机版