在标准C库中,可以用 malloc()和 free()这两个函数动态的分配内存和释放内存,但是,在嵌入式实时操作系统中,调用 malloc()和 free()却是危险的,原因有以下几点:
在小型嵌入式系统中并不总是可用的。
它们的实现可能非常的大,占据了相当大的一块代码空间。
他们几乎都不是线程安全的。
它们并不是确定的,每次调用这些函数执行的时间可能都不一样。
它们有可能产生碎片。
这两个函数会使得链接器配置得复杂。
如果允许堆空间的生长方向覆盖其他变量占据的内存,它们会成为debug的灾难 。
在一般的实时嵌入式系统中,由于实时性的要求,很少使用虚拟内存机制。所有的内存都需要用户参与分配,直接操作物理内存,所分配的内存不能超过系统的物理内存,所有的系统堆栈的管理,都由用户自己管理。
|