#memory-layout #byte #traits #marker #type #mem #derive

rust-secure-code/mem-markers

Rust 库,用于处理类型在内存中的布局标记特性

1 个不稳定版本

0.1.0 2020年3月12日

#2369Rust 模式

22 星 & 14 关注者

32KB
865

Mem Markers

一个 crate,用于描述给定类型的某些内存布局不变性,并提供用于派生这些特性的宏。

特性

该 crate 当前包含以下特性

  • FixedLayout:具有明确布局且可信赖的类型
  • NoUninit:没有任何未初始化字节的类型
  • ByteComplete:任何适当大小和对齐的字节数组都是该类型的有效表示
  • Zeroable:在内存中,所有零都是该类型的有效表示
  • FromBytes:任何适当大小和对齐的字节数组都可以被视为该类型
  • AsBytes:该类型可以可靠地转换为字节数组切片

示例

安全转换

fn safe_transmute<From: AsBytes, To: FromBytes>(from: From) -> To {
    let from = &std::mem::ManuallyDrop::new(from);
    assert!(std::mem::size_of::<From>() == std::mem::size_of::<To>(), "Cannot transmute to smaller type");
    assert!(std::mem::align_of::<From>() % std::mem::align_of::<To>() == 0, "Not aligned");
    
    unsafe { std::mem::transmute_copy(from) }
}

依赖项