如何解决使用外部和内部内存作为堆
我已经在我的项目中连接了外部 SRAM 存储器。我想要做的是在运行时使用 malloc() 将数据存储在外部或内部存储器中。如何在代码执行期间使用 malloc 决定在哪个内存中存储堆数据?我知道我必须编辑链接器脚本,但之后它会将所有堆数据存储在外部存储器中。 是否有任何链接器命令可以说在外部或内部存储器中分配下一个 malloc() ?对于栈数据,我们可以使用 attribute((section("name"))) 变量属性,但是堆有什么东西吗?
谢谢!
解决方法
C 库中的
malloc
通常只能使用一个位置的内存。如果您使用 newlib,那么它会使用 _sbrk
找到此内存。 default implementation of _sbrk
取决于链接描述文件对符号 end
或 _end
的定义,但您也可以实现自己的定义。
您必须选择一个位置供 malloc
访问,并使用您自己的自定义函数从其他地方分配内存。
许多库和 RTOS 实现都这样做。参见例如 mem_malloc
in LwIP 或 rt_alloc_mem
in Keil RTX
您可以使用多种方案来决定使用哪种内存,例如为特定目的使用固定大小的块池。我倾向于为 malloc
使用最快的内部 SRAM,因为它会变得非常碎片化。然后我确保只将 malloc
用于小事情,然后自定义函数用于较大的分配。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。