我正在研发微控制器(SHARC)这是一款非常标准的微控制器,带有ALU,DAG和一些RAM。我想了解malloc
和free
如何在这些架构上运行。
让我们举个例子。我的堆中有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
返回一个块的地址,正在运行的程序将解决该指针,并且无法动态更改。
在这种情况下,我看到两种可能性:
堆非常小,在这种情况下,永远不应使用malloc
和free
。
堆很大,但在重新启动系统之前,碎片化的内存永远不会进行碎片整理。
我错了,如果是的话,malloc
和free
如何处理8051
,ARM Cortex M0
,MSP430
,...等小型架构? p>