据我所知,Rust ABI不稳定.但是,Rust编译器当前执行一些优化以将字段压缩到标记中.例如:
use std::mem::size_of;
enum Node {
N1_1 {
is_good: bool,
stuff: u32,
},
N1_2 {
is_good: bool,
left: Box<Node>,
right: Box<Node>,
},
}
enum Node2 {
N2_1 { stuff: u32 },
N2_2,
}
fn main() {
println!("{:?} {:?}", size_of::<Node>(), size_of::<Node2>());
}
Run Code Online (Sandbox Code Playgroud)
这打印24 8.显然,正在发生的是字段被折叠到构造函数标记中.这种行为有保证吗?我不是在询问特定的内存表示是否保持不变,而是否承诺未来某个时间点的大小不会增加.
我想不出一个很好的理由,为什么他们可能想在某些时候改变代表性以增加尺寸,但也许这只是我缺乏想象力,所以我正在寻找一个"官方"答案.
与GitHub问题/ RFC的链接会很有帮助.我尝试浏览问题跟踪器,但无法找到任何内容.我能找到的最接近的东西bool是1字节大小,这是无法保证的.
rust ×1