为什么 程序中要用heap?
主要是为了想分配多少内存就分配多少,预先的需求有时候是不知道的,那么如果不用heap只能按照最大的内存预先定义出来,是个巨大的浪费,有时候内存就捉襟见肘了。所以就用heap了。
那么为什么要选heap1?不选heap2和heap3呢?
因为heap1最简单,容易看懂。不容易出问题。
---------------------------
(1)heap1中STM32对应的字节对齐(portBYTE_ALIGNMENT)选择几呢?我认为是选择4个字节对齐。因为通过STM32的编译器结果发现对于数组的对齐都是放在4的整数倍上的,如果定义的数组字节长度不是4的整数倍,那么编译器会自动填充,看生成的内存map就看出来了,填充显示的是PAD。
(2)关于#define configADJUSTED_HEAP_SIZE ( configTOTAL_HEAP_SIZE - portBYTE_ALIGNMENT )为啥这样宏定义?或者换个问法就是为什么首次要从ucHeap[ portBYTE_ALIGNMENT ]开始呢?
这个问题博客http://blog.youkuaiyun.com/u014381531/article/details/38623641讲了这个问题。
这里再弄个例子讲一讲。比如把portBYTE_ALIGNMENT_MASK设置为8,用ucHeap[ 0 ],
看到了吧,pucAlignedHeap的值竟然不在数组ucHeap的地址范围内了。