|
测试环境: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会有内存碎片吧? |
微信公众号
手机版