小编Joh*_*ith的帖子

如何将结构数组放置在另一个结构的末尾而不进行内存分段

我正在将低延迟实时应用程序移植到 Rust。本质上我想在不复制的情况下执行尽可能多的操作。目前内存分配的主要来源来自网络堆栈。每次接收或发送数据包时,都会在幕后进行大量复制,以强制从 Rust 结构中检索字节。我想停止这样做。

本质上我希望能够将数据包从字节转换为字节并传输它。下面是一个无法正常工作的示例代码,它说明了我想要做的事情。

#[repr(C, align(4))]
#[derive(Debug)]
struct Content {
    first: u8,
    padding: [u8; 3]
}

#[repr(C, align(4))]
#[derive(Debug)]
struct Packet {
    header_id: u16,
    header_padding: [u8; 2],
    // This is another pointer I want it to be located after header_padding
    content: Box<[Content]>,
}

#[derive(Debug)]
struct ParsedPacket {
    content_length: usize,
    // The box below should directly reference the original u8 bytes without copying
    packet: Box<Packet>,
}

unsafe fn buf_to_packet(bs: Box<[u8]>) -> Option<Box<ParsedPacket>> {
    // How to implement this
    // First …
Run Code Online (Sandbox Code Playgroud)

memory memory-management rust

3
推荐指数
1
解决办法
121
查看次数

标签 统计

memory ×1

memory-management ×1

rust ×1