具有静态堆的小块的内存分配器(Typ <= 16字节,Rare&gt; = 64字节,Max = 192)

时间:2013-09-13 22:11:54

标签: c memory memory-management allocator

这个分配器将在具有静态内存的嵌入式系统中使用(即,没有可用的系统堆,所以'heap'将只是'char heap [4096]')

似乎有很多“小内存分配器”,但我正在寻找一个处理真正的小分配。我说的是16字节的典型大小,CPU使用率小,内存使用量少。

考虑到典型的分配大小是&lt; = 16字节,Rare分配是&lt; = 64字节,而“百万分之一”分配是高达192字节,我想将这些4096字节简单地切成255页每个16字节,并具有位图和“下一个空闲块”指针。因此,不是搜索,如果内存可用,则标记适当的块并且函数返回指针。只有在达到目的结束时,它才会搜索所需大小的适当插槽。由于系统的性质,在“下一个免费块”到达“堆”结束时,早期的块'应该'已经被释放。

所以,

有谁知道这样的事情已经存在? 如果没有,任何人都可以在我的理论中挖洞吗? 或者,他们可以提出更好的建议吗?

仅限C,没有C ++。 (整个应用程序必须符合&lt; = 64KB,到目前为止大约有40K的图形......)

1 个答案:

答案 0 :(得分:1)

OP:任何人都可以在我的理论中挖洞吗?

在阅读上半部分时,我想出了一个使用位数组来记录使用情况的解决方案,并提出了与下半年中概述的相同的内容。

所以这就是洞:避免编码一个16位的块。允许您的位图在开发开始时使用20或24字节块。在此期间,您可能希望将标记信息和标记放在块的边缘。因此,你可以更容易地追踪双重免费(),外部分配等用途。当然,价格是一个较小的有效池。

在调试阶段之后,请放心使用16字节解决方案。

请务必跟踪0&lt; =总分配&lt; =(2048 - 开销)并允许检查它与您的位图。

对于调试,请考虑使用&#34; 0xDEAD&#34;等填充释放的块,以帮助强制意外的免费使用错误。