1、IAR分配堆,正常情况下在这里可以改
2、今天在分配堆时,发现将Heap的大小增加后中的总消耗ram大小不变,这里很奇怪
3、正常情况下,堆和栈都是从ram分配的空间,一般链接文本会将他们地址放到最后,如:
这个iar的icf文件,堆和栈放在 紧挨着rw变量地址之后,他们一块构成了整个ram的使用空间
4、所以如果增加HEAP大小,则总的ram消耗必然增加的
5、这里经过测试,原来时这样:
因为heap时 预留给动态申请内存用的,我的程序没使用malloc函数(或相似功能函数),这时IAR会自动优化代码,释放了Heap空间,还给了ram
6、验证:
1》 程序没使用malloc函数时,查看map文件里关于堆和栈的信息如下:
可以看到图中只有栈的信息,没有heap的地址信息,说明heap还给ram了
2》 随便在一个地方使用malloc函数,map文件里关于堆和栈的信息如下:
这里显示出来了HEAP信息,并提示有个FAILED,因为我这个mcu空间比较小,如果ram还分配空间给了Heap,导致整个ram空间不够,故而提示错误
补一张,减小heap后的成功分配heap信息
原来如此