这个分配器将在具有静态内存的嵌入式系统中使用(即,没有可用的系统堆,所以'heap'将只是'char heap [4096]')
似乎有很多“小内存分配器”,但我正在寻找一个处理真正的小分配。我说的是16字节的典型大小,CPU使用率小,内存使用量少。
考虑到典型的分配大小是< = 16字节,Rare分配是< = 64字节,而“百万分之一”分配是高达192字节,我想将这些4096字节简单地切成255页每个16字节,并具有位图和“下一个空闲块”指针。因此,不是搜索,如果内存可用,则标记适当的块并且函数返回指针。只有在达到目的结束时,它才会搜索所需大小的适当插槽。由于系统的性质,在“下一个免费块”到达“堆”结束时,早期的块'应该'已经被释放。
所以,
有谁知道这样的事情已经存在? 如果没有,任何人都可以在我的理论中挖洞吗? 或者,他们可以提出更好的建议吗?
仅限C,没有C ++。 (整个应用程序必须符合< = 64KB,到目前为止大约有40K的图形......)
答案 0 :(得分:1)
在阅读上半部分时,我想出了一个使用位数组来记录使用情况的解决方案,并提出了与下半年中概述的相同的内容。
所以这就是洞:避免硬编码一个16位的块。允许您的位图在开发开始时使用20或24字节块。在此期间,您可能希望将标记信息和标记放在块的边缘。因此,你可以更容易地追踪双重免费(),外部分配等用途。当然,价格是一个较小的有效池。
在调试阶段之后,请放心使用16字节解决方案。
请务必跟踪0< =总分配< =(2048 - 开销)并允许检查它与您的位图。
对于调试,请考虑使用" 0xDEAD"等填充释放的块,以帮助强制意外的免费使用错误。