【问题标题】:malloc in embedded systems [duplicate]嵌入式系统中的malloc [重复]
【发布时间】:2016-03-28 13:26:40
【问题描述】:

我正在使用嵌入式系统。该应用程序在 AT91SAMxxxx 和 cortex m3 lpc17xxx 上运行。我正在研究动态内存分配,因为它会极大地改变应用程序的面貌(并给我更多的权力)。

我认为我唯一真正的路线是为堆设置一个内存区域并设计一个最适合(双关语)我的目的的定制 malloc。

在查看不同的内存分配算法时,您一定会偶然发现 Doug Lea 的 malloc。我认为这已用于嵌入式系统,例如我的没有操作系统的嵌入式系统,并且提供了 sbrk() 函数的定制版本来实现这一点。我正在尝试找到实现这一目标的好例子,以便在我开始编写自己的代码之前尝试概念验证。

是否可以在像我这样的系统中使用 dlmalloc ?

如果是,任何人都可以向我指出相关资源吗? (没有找到很多对我有帮助的)

根据我的需要编写自己的 malloc 会更好吗?

抱歉,到目前为止,我的大部分研究都是关于设计一个不使用 doug 的 malloc,这是一个不同的挑战。我想我正在尝试更深入地研究这条路线是浪费时间。

编辑:

故事的寓意:在我的情况下看 dlmalloc 毫无意义。

【问题讨论】:

  • 您的嵌入式应用程序真的需要动态内存分配吗?
  • 您需要支持的分配的实际特征是什么?通过更具体,也许您/我们可以提出更理想的解决方案。
  • 这在很大程度上取决于您分配的性质。在许多情况下,动态分配固定大小的块就足够了。这将比通用分配方法更容易实现(在时间和内存方面会有更多的开销,需要合并空闲块等)。
  • @Shane 你所描述的一切都可以在没有动态分配的情况下解决。你从不使用你的一些记忆中得到什么?
  • 你也可以实现一个简单的buddy memory allocator,详情参见Knuth §2.5。

标签: c gcc embedded malloc


【解决方案1】:

对于您的情况,您自己实现 mallocdlmalloc 绝对是可能的,但不建议这样做。

在非常底层的嵌入式系统、裸机 MCU 等上,使用 malloc 毫无意义。

您将运行您的应用,并且仅在其上运行您的应用,您知道您拥有和可以使用多少内存,并且您完全能够定制您的程序以满足此类需求。使用 malloc 可以节省内存,但这在这里毫无意义。如果您的程序在其最高内存使用情况下没有超过设备上的可用内存,并且您的程序是唯一运行的程序,则没有理由使用 malloc,也没有理由让任何内存闲置。

tl;dr 这可能但非常没有意义。

【讨论】:

  • 你的意思是dlmalloc还是所有形式的动态内存分配?我可能会编辑我的问题以向我的应用程序添加更多细节,但在我的情况下,运行时的内存分配绝对不是毫无意义的。
  • 对不起,你说我自己无视上面的评论
猜你喜欢
  • 2012-03-09
  • 2015-07-15
  • 2014-04-20
  • 1970-01-01
  • 1970-01-01
  • 2020-10-05
  • 2017-01-07
  • 1970-01-01
  • 2010-09-15
相关资源
最近更新 更多