微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用外部和内部内存作为堆

如何解决使用外部和内部内存作为堆

我已经在我的项目中连接了外部 SRAM 存储器。我想要做的是在运行时使用 malloc() 将数据存储在外部或内部存储器中。如何在代码执行期间使用 malloc 决定在哪个内存中存储堆数据?我知道我必须编辑链接器脚本,但之后它会将所有堆数据存储在外部存储器中。 是否有任何链接器命令可以说在外部或内部存储器中分配下一个 malloc() ?对于栈数据,我们可以使用 attribute((section("name"))) 变量属性,但是堆有什么东西吗?

谢谢!

解决方法

C 库中的

malloc 通常只能使用一个位置的内存。如果您使用 newlib,那么它会使用 _sbrk 找到此内存。 default implementation of _sbrk 取决于链接描述文件对符号 end_end 的定义,但您也可以实现自己的定义。

您必须选择一个位置供 malloc 访问,并使用您自己的自定义函数从其他地方分配内存。

许多库和 RTOS 实现都这样做。参见例如 mem_malloc in LwIPrt_alloc_mem in Keil RTX

您可以使用多种方案来决定使用哪种内存,例如为特定目的使用固定大小的块池。我倾向于为 malloc 使用最快的内部 SRAM,因为它会变得非常碎片化。然后我确保只将 malloc 用于小事情,然后自定义函数用于较大的分配。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。