微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从固定内存块分配内存字节数组

如何解决从固定内存块分配内存字节数组

如何使用 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。