1

此分配器将在具有静态内存的嵌入式系统中使用(即,没有可用的系统堆,因此“堆”将简单地为“字符堆 [4096]”)

周围似乎有很多“小内存分配器”,但我正在寻找一个可以处理非常小的分配的。我说的是典型的 16 字节大小,CPU 使用量较小,内存使用量较小。

考虑到典型的分配大小是 <= 16 字节,稀有分配是 <= 64 字节,而“百万分之一”的分配高达 192 字节,我想简单地将这 4096 字节分成 255 页,每页 16 字节,然后有一个位图和“下一个空闲块”指针。因此,如果内存可用,则不是搜索,而是标记适当的块并且函数返回指针。只有到达终点后,它才会去寻找所需大小的适当插槽。由于系统的性质,在“下一个空闲块”到达“堆”末尾时,较早的块“应该”已经被释放。

所以,

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

只有 C,没有 C++。(整个应用程序必须适合 <= 64KB,到目前为止大约有 40K 的图形......)

4

1 回答 1

1

OP:有人能在我的理论中戳破洞吗?

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

所以这是一个漏洞:避免对 16 位块进行硬编码。允许您的位图在开发开始时使用,例如 20 或 24 字节块。在此期间,您可能希望将标记信息和哨兵放在块的边缘。因此,您可以更轻松地跟踪 double free()、分配外的使用情况等。当然,价格是较小的有效池。

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

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

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

于 2013-09-14T03:01:28.823 回答