1 个不稳定版本
0.1.0 | 2020年3月12日 |
---|
#2369 在 Rust 模式
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) }
}