为堆使用外部和内部存储器

Using external and internal memory for heap

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

谢谢!

C 库中的

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

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

许多库和 RTOS 实现都这样做。例如参见 [​​=21=]

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