我正在将低延迟实时应用程序移植到 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)