首页 文章

适用于mempool /内存分配器的布局? (哪种算法)

提问于
浏览
3

你好,我正在考虑尝试通过尝试一些我从未做过的事情来扩展我的技能 . 让我有点困惑的一件事是内存分配器和内存池 . 我想要做的是占用一块内存,只从系统中分配一次内存 . 我有当前设置,内存是一个字节数组(或字符串),为我的测试目的是65535 .

我有两个算法,我考虑过使用它 .

首先是一种算法,其中整个数据块附加了剩余的内存量,以及指向第一个分配块(或块的头部)的指针(或者更确切地说是偏移量),然后每个分配前面都有分配的大小,以及上一个和下一个分配,所以我可以轻松地释放分配 . 然后,我可以通过查看当前分配后的空间来生成最大和最小的块 .

我的另一个选择是在分配的内存之前添加第二个偏移量,并将该点指向第一个未分配的块,然后每个未分配的块也具有上一个和下一个分配,以及一个大小,以便我可以轻松找到一个位置我的下一个分配可以放置 .

问题是我不知道哪个是“正确的” . 假设我们将有可变大小的分配(但是大多数将是这个开销没有那么多的大小 . )第一个将获得最大和最小可能的块更慢,但我可以存储它们并在必要时操作它们避免再生它们 . 然而,第二个将需要更长的时间来解除分配(由于必须找到哪个解除分配器在哪个分配器旁边)并且不一定给分配带来任何好处 . 事实上,对于我剩下少于6个字节的情况,它将需要更专门的代码(大小为2个字节,prev偏移为2,下一个偏移为2) .

我的直觉告诉我,第一个会更优越,但关于第二个的东西是诱人的 . 任何意见?还是有一个更容易的解决方案?

1 回答

相关问题