问题描述
如何使用 boost pool 或其他类似的分配器技术从固定内存块中分配连续的 512 字节扇区。我正在尝试在 C++17 中模拟内存文件系统。
我假设在幕后,当用户创建指定长度的新文件时,可以使用单独的文件系统元数据对象将文件名与该内存块/池中的根指针/长度节点相关联。
>如果文件在小于当前长度的指定偏移量处被追加或截断,则需要在上述根节点中添加或删除额外的链表节点。碎片整理会很好但可选。鉴于最小扇区分配大小为 512 字节,如果扇区未完全使用,则对文件的小分配/追加可能不需要添加额外的链表节点。
我不确定我上面描述的内容是否作为一个简单的库存在,或者增强池是否按原样为我做这件事。我只想分配字节块,而不是对象数组。
解决方法
也许你想要一个位集数组:
#include <bitset>
int main() {
std::bitset<8> bytes[512];
}
它是一个 8 字节的位集数组。
std::bitset
是一个固定大小的 bool 数组(0 和 1 表示真假),因此由于一个字节是 8 位,我们需要一个 8 字节的 std::bitset
,我们声明这个像这样:
std::bitset<8>
然后,因为我们想要 512 个字节,所以我们创建了一个位集数组,如下所示:
std::bitset<8> bytes[512];
然后,您可以拥有std::vector
这些或其他东西。
您也可以有一个 4096 位的位集(512 字节,其中每个是 8 位),如下所示:
std::bitset<4096> bytes;
然后你可以有一个包含它的动态容器,比如 std::vector
。
至于 Boost Pool,这里有一个很棒的教程:https://theboostcpplibraries.com/boost.pool。