gpt4 book ai didi

rust - 如何叠加数据结构?

转载 作者:行者123 更新时间:2023-12-05 05:42:57 25 4
gpt4 key购买 nike

我有一个 8k 字节的缓冲区。缓冲区第一部分中的数据是高度结构化的,具有一组大小为 u32 和 u16 的变量。缓冲区后面部分的数据用于小字节 block 。在结构化数据之后,有一个偏移量数组,指向每个小 blob 的开始。像这样:

struct MyBuffer {
myvalue: u32,
myothervalue: u16,
offsets: [u16], // of unknown length
bytes: [u8] // fills the rest of the buffer
}

我正在寻找一种有效的方法来从磁盘中获取 8k 字节的 blob,然后将其覆盖或转换为 MyBuffer 结构。通过这种方式,我可以轻松地获取/设置结构化值(let myvar = my_buffer.myvalue),并且我还可以访问作为切片的小 blob(let myslice = my_buffer[offsets[2 ..offsets[3]]).

这种方法的好处是您可以获得对数据的高效、零拷贝访问。

偏移量的数量和字节的 blob 数量是未知的这一事实使这变得棘手。

在 C 中,这很容易;您只需将指向 8k 缓冲区的指针转换为适当的结构,它就可以正常工作。您有两个不同的数据结构指向同一内存。

我如何在 Rust 中做同样的事情?

最佳答案

我发现有一个完整的 Rust 生态系统致力于解决这个问题。 Rust 本身处理得不好。

有许多 Rust 序列化框架,包括那些“零拷贝”的框架。最佳列表在这里:https://github.com/djkoloski/rust_serialization_benchmark

零拷贝框架包括 abomonation、capnp、flatbuffers、rkyv 和 alkahest。

关于rust - 如何叠加数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71917875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com