Rust 内存对齐
https://stackoverflow.com/questions/32428153/how-can-i-align-a-struct-to-a-specified-byte-boundary
use std::mem;
struct MyStruct {
a: u8,
b: u32,
c: u16,
}
fn main() {
println!("Size of MyStruct: {}", mem::size_of::<MyStruct>());
println!("Alignment of MyStruct: {}", mem::align_of::<MyStruct>());
}
// Size of MyStruct: 8
// Alignment of MyStruct: 4• 按照对齐要求排序字段,避免不必要的填充。为了减少填充字节,通常会把对齐要求大的字段放在前面,对齐要求小的字段放在后面。这样可以尽量避免由于字段之间的对齐不匹配而导致的填充字节。
• 使用紧凑的数据类型和 Option 来节省空间。Rust 能够利用未初始化状态来表示 None,而不需要额外的内存开销。因此在设计数据结构时,选择 Option 而不是 bool + 数据类型 的组合可以节省内存。
struct MyStruct {
a: Option<u32>, // 只占用 4 字节,而不是额外的空间
}• 使用 #[repr(C)] 保证跨平台一致性,但通常会牺牲性能。
• 使用 #[repr(packed)] 来取消对齐,但可能会导致性能问题和访问错误。