malloc如何知道嵌入式系统中第一个可用块在哪里?

问题描述 投票:-1回答:1

我已经阅读到malloc具有依赖于平台的多种实现。

它如何在裸机编程中的嵌入式设备中工作?假设我们有一个具有256KB闪存和64KB RAM的单片机。

它怎么知道我的程序有多少可用RAM?

embedded malloc bare-metal
1个回答
0
投票

对于裸机系统,您将在链接描述文件中分配一个特定的段,通常称为.heap。进程之间没有内存共享之类的东西,这意味着堆必须具有固定的最大大小,因此通常是毫无用处的。 malloc对您的程序使用了多少内存一无所知,因为看不到桌面操作系统。

您的RAM分为.stack.data.bss.heap,每个都有自己固定的最大大小。有关这些细分的更多信息,请点击https://electronics.stackexchange.com/a/237759/6102。在典型的裸机MCU应用中,大多数RAM将保留用于.data.bss。您将为堆栈保留128字节到几个kb的空间。通常,您通常根本不会有堆-但是如果这样做,堆将坐在那里并占用固定数量的x kb,无论您实际使用了多少kb。

malloc本身可以确实以不同的方式实现。您可以在每个分配的段中都包含一个“标头”,标头说明分配的大小以及下一个可用空闲段的地址。或者,您也可以将其实现为查找表,其中每个项目都是指向第一个元素和大小的指针。

这些都不是特别重要,因为您不应该在嵌入式系统中使用堆分配。主要原因是it doesn't make any sense。您不需要任意行为,而需要确定性行为。您想在最坏的情况下分配x的内存量,并且如果要使用堆,则无论如何它都必须至少大那么一点,所以您从使用堆中只会膨胀而已。然后是分配开销,碎片和泄漏的所有常见问题。

对于裸机/ RTOS应用程序,请帮个忙,并从链接描述文件中删除.heap,然后忘记您曾听说过malloc。 MCU不是PC。

© www.soinside.com 2019 - 2024. All rights reserved.