动态分配如何在小型架构上工作(没有MMU)

时间:2015-10-31 20:25:50

标签: c memory memory-management

我正在研发微控制器(SHARC)这是一款非常标准的微控制器,带有ALU,DAG和一些RAM。我想了解mallocfree如何在这些架构上运行。

让我们举个例子。我的堆中有16块可用内存。我想在运行以下代码后,内存将如下所示:

ptr[0] = malloc(3); 
ptr[1] = malloc(5);
ptr[2] = malloc(7);

堆:

0 - ptr0
1 |
2 |
3 - ptr1
4 |
5 |
6 |
7 |
8 - ptr2
9 |
A |
B |
C |
D | 
E |
F

现在我们假设我免费ptr[1]。可用内存为5 + 1但我无法执行6 malloc因为内存碎片化。

所以我想象的解决方案是,在每个malloc中,malloc插入先前分配的块的地址,后跟保留块的长度。从中可以很容易地知道堆的内容以及它可以在哪里找到可用空间。如果缺少连续空间,malloc无法进行动态分配。

我不认为没有MMU就可以进行碎片整理。一旦malloc返回一个块的地址,正在运行的程序将解决该指针,并且无法动态更改。

在这种情况下,我看到两种可能性:

  1. 堆非常小,在这种情况下,永远不应使用mallocfree

  2. 堆很大,但在重新启动系统之前,碎片化的内存永远不会进行碎片整理。

  3. 我错了,如果是的话,mallocfree如何处理8051ARM Cortex M0MSP430,...等小型架构? p>

0 个答案:

没有答案