我听说Enea的OSE的malloc实现并不是很有效--有人知道他们是否使用了像ptmalloc2这样的标准malloc吗?
如果有人通过将其他malloc移植到Enea的OSE来获得更好的结果,我会很感兴趣。
发布于 2013-12-21 19:23:33
在任何实时多线程系统中,malloc()的基本问题是非确定性行为和线程安全。
可以想象,OSE实现至少是线程安全的。非确定性分配时间可以通过不在实时关键代码中分配来处理(例如在初始化期间,或者仅在非关键后台线程中)。
由于线程安全的原因,许多RTOS库提供了malloc实现,但同样有许多用于嵌入式系统的标准库实现提供了互斥锁存根,因此标准库实现也可以是线程安全的。检查你的库中关于线程安全的文档。
要解决实时关键代码中的不确定性问题,可以使用固定块分配器。OSE可以直接提供这一点,但通过预先分配(动态或静态)内存块并在队列中放置指向每个块的指针,可以轻松地实现它。要分配一个块,只需从队列中取出一个指针,然后将指针放回队列中释放它。如果队列为空,则表示内存不足。多个队列,每个队列包含不同大小的块,将在一定程度上提高内存使用率并避免“浪费”。
https://stackoverflow.com/questions/20698926
复制相似问题