Embedded 对Eneas OSE使用不同的malloc实现?

Embedded 对Eneas OSE使用不同的malloc实现?,embedded,malloc,ose,Embedded,Malloc,Ose,我听说Enea的OSE的malloc实现不是很有效——有人知道他们是否使用了一些标准的malloc,比如ptmalloc2吗 如果有人通过将其他malloc移植到Enea的OSE来获得更好的结果,我会很感兴趣。在任何实时多线程系统中,malloc()的基本问题是不确定性行为和线程安全 可以想象OSE实现至少是线程安全的。不确定的分配时间可以通过不在实时关键代码中分配来处理(例如在初始化期间,或者仅在非关键后台线程中) 出于线程安全的原因,许多RTOS库提供了malloc实现,但同样多的嵌入式系统

我听说Enea的OSE的malloc实现不是很有效——有人知道他们是否使用了一些标准的malloc,比如ptmalloc2吗


如果有人通过将其他malloc移植到Enea的OSE来获得更好的结果,我会很感兴趣。

在任何实时多线程系统中,
malloc()
的基本问题是不确定性行为和线程安全

可以想象OSE实现至少是线程安全的。不确定的分配时间可以通过不在实时关键代码中分配来处理(例如在初始化期间,或者仅在非关键后台线程中)

出于线程安全的原因,许多RTOS库提供了malloc实现,但同样多的嵌入式系统标准库实现提供了互斥存根,因此标准库实现也可以实现线程安全。检查您的库中有关线程安全的文档


要解决实时关键代码中的非确定性问题,可以使用固定块分配器。OSE可以直接提供,但通过预先分配(动态或静态)内存块并在队列中放置指向每个块的指针,它很容易实现。要分配一个块,只需从队列中取出一个指针,要释放它,将指针放回队列即可。如果队列为空,则表示内存不足。多个队列,每个队列包含不同大小的块,将在一定程度上提高内存使用率并避免“浪费”。

什么是“不是很有效”呢?还是“更好的结果”呢?您需要清楚您要解决的问题-在您的应用程序中它可能不是问题。你已经“听到”了一些东西,但根据定义,这是道听途说,文件或不虔诚的证据在哪里?不是真的回答我的问题,但无论如何,谢谢。OSE还有一个更确定的内存分配,我已经知道了。但是由于某些原因,我现在对标准的malloc实现更感兴趣。@user1147851:我意识到这不是一个直接的答案,但正如我在对问题的评论中所提到的,对于您试图解决的问题和您需要的结果,您还不是特别清楚。如果你在我的评论中提出问题来改进这个问题,你可能会得到更好的答案。如果你选择不解决这些缺陷,你就没有真正帮助自己。