当结构体的大小在 32 和 64 之间时,将结构体与 32 或 64 对齐有什么区别吗?

问题描述 投票:0回答:1
#[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字节对齐有什么区别吗?

rust memory memory-management alignment
1个回答
1
投票

是的,对齐方式(对

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

以及其他任何需要对齐的地方。

© www.soinside.com 2019 - 2024. All rights reserved.