首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >uCOS-III下的内存分配

uCOS-III下的内存分配
EN

Stack Overflow用户
提问于 2016-09-06 22:43:35
回答 1查看 489关注 0票数 1

我正在开发一个在uCOS-III下使用的C库。中央处理器是ARM Cortex M4 SAM4C。在这个库中,我想使用一个第三方产品X,它的特定名称在这里并不重要。X的源代码是完全可用的,并且编译起来没有问题。

在X中,使用calloc()和free()执行大量的内存分配。问题是,普通使用malloc对于嵌入式系统是不可取的,因为内存碎片。uCOS-III的文档明确建议不要使用malloc -而应使用OSMemCreate/OSMemGet/OSMemPut来分配和释放静态分配的内存块中的内存块。

问题-1:

绕过malloc的“标准实现”的一般建议是什么?我更喜欢一种malloc,在这种情况下,我可以访问固定的内存池(例如,专用于特殊任务)

问题2:

应该如何正确使用OSMemCreate()?我首先要用一定的块大小初始化一个内存分区。请求的内存量在4字节和大约800字节之间。我可以根据请求获得块,但大小固定。如果block-size=4,我不能分配16个字节,因为块在内存中不是连续的。如果block-size=800,而我只需要4个字节,那么大部分块都是未使用的,我很快就会用完所有的块。

所以我不知道,如何使用OSMemCreate来解决我原来的问题…

有没有人能给我一个建议,我该怎么做?

非常感谢,迈克尔

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-07 00:45:48

1)不要链接到malloc/free的标准库版本。相反,创建您自己的malloc/free实现,作为OSMemGet/OSMemPut的包装器。

2)使用OSMemCreate可以创建多个内存分区。创建包含块大小的小型、中型和大型分区,这些分区针对您的应用程序进行调整,以减少浪费。

如果您希望malloc从您的各种内存分区中获得适当大小的块,那么您必须发明一些魔术,以便free将该块返回到适当的内存分区。(也许malloc分配了一个额外的字,将指针存储在第一个字中的内存分区,然后返回存储指针的字之后的地址。那么free就知道从前面的字中获取内存分区指针。)

使用malloc/free的另一种方法是重写该代码以使用静态分配的变量,或者直接调用OSMemGet/OSMemPut。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39351839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档