【发布时间】: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。