嵌入式系统中的动态内存分配(malloc)

6
我正在使用嵌入式系统,应用程序在AT91SAMxxxx和cortex m3 lpc17xxx上运行。我正在研究动态内存分配,因为它将大大改变应用程序的面貌(并给我更多的Power)。
我认为我的唯一真正途径是为堆设置一个内存区域,并设计一个最符合我的目的的定制malloc。
当搜索不同的内存分配算法时,您会发现Doug Lea的malloc。我认为这已经在像我的嵌入式系统中使用过了,其中没有操作系统,并提供了定制版本的sbrk()函数来完成此操作。我试图找到好的实例来证明自己是否可以写出类似的代码之前。
在像我这样的系统中使用dlmalloc是否可能?
如果是,有人能指向相关资源吗?(我没有找到许多有帮助的资源)
是不是最好去编写适合自己需求的malloc?
抱歉,我迄今为止的大部分研究都是关于设计malloc而不是使用doug的,这是一个不同的挑战。我想知道深入研究这个路线是否浪费时间。
编辑:
故事的寓意:在我的情况下,研究dlmalloc是无意义的。

2
你需要支持的分配的实际特征是什么?通过更具体的描述,也许我们可以想出更理想的解决方案。 - John Zwinck
2
这在很大程度上取决于你的分配的本质。在许多情况下,动态分配固定大小的块就足够了。这比通用的分配方法更容易实现(后者在时间和内存方面有更多的开销,需要合并空闲块等)。 - Ctx
@JohnZwinck,你说得很对,我应该表述得更清楚。就分配的内存而言,大部分都是相当明确的,大小也已经确定(由构成应用程序架构的一些结构体组成)。然而,用户将定义不同长度的文本字符串,这可能会导致碎片化问题。所有这些操作都在关键中断之外完成,因此速度并不是最重要的因素,但也不能太慢。 - user1908607
2
@Shane,你所描述的一切都可以在不使用动态分配的情况下解决。仅仅不使用一些内存,你能得到什么好处呢? - Magisch
1
你也可以实现一个简单的伙伴内存分配器,详情请参见Knuth §2.5。 - fuz
显示剩余3条评论
1个回答

4

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

在非常低级的嵌入式系统、裸金属MCU等上,使用malloc是没有意义的。

你将在这些设备上运行你的应用程序并且只运行你的应用程序。你知道你有多少内存可用,并且能够完全根据需要调整你的程序。使用malloc可以节省内存,但在这种情况下是无意义的。如果你的程序在最高内存使用量时不超过设备可用的内存,并且你的程序是唯一运行的,那么就没有理由使用malloc,也没有理由让任何内存未被使用。

简而言之,这是可能的,但过度无意义。


你是指dlmalloc或者所有形式的动态内存分配吗?我可能会编辑我的问题以添加更多关于我的应用程序的具体信息,但在运行时进行内存分配在我的情况下绝对不是无意义的。 - user1908607
抱歉,您提到了我的不尊重上面的评论。 - user1908607

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接