#[repr(align(32))]
struct Data {
array:[ f64; 6],
}
fn main() {
println!("size of Data: {}", std::mem::size_of::<Data>());
}
如果没有对齐关键字 (
#[repr(align(32))]
),类型 Data
会消耗 48 字节内存。但使用关键字 #[repr(align(32))]
或 #[repr(align(64))]
时,它会消耗 64 个字节。
那么,32字节和64字节对齐有什么区别吗?
是的,对齐方式(对
Data
有效的内存地址)不同,并且它会产生差异,例如在包含 Data
的 结构中:
#[repr(align(32))]
struct Data32 {
array:[ f64; 6],
}
#[repr(C)]
struct DD32 {
offset: u8,
data: Data32,
}#[repr(align(64))]
struct Data64 {
array:[ f64; 6],
}
#[repr(C)]
struct DD64 {
offset: u8,
data: Data64,
}
fn main() {
println!("size of Data32: {}", std::mem::size_of::<Data32>());
println!("size of DD32: {}", std::mem::size_of::<DD32>());
println!("size of Data64: {}", std::mem::size_of::<Data64>());
println!("size of DD64: {}", std::mem::size_of::<DD64>());
}
输出:
size of Data32: 64
size of DD32: 96
size of Data64: 64
size of DD64: 128
以及其他任何需要对齐的地方。