示例代码:
use std::sync::atomic::{AtomicU32, Ordering};
#[derive(Debug)]
struct Token(u32);
impl Token {
fn new() -> Self {
static COUNTER: AtomicU32 = AtomicU32::new(1);
let inner = COUNTER.fetch_add(1, Ordering::Relaxed);
Token(inner)
}
}
fn main() {
let t1 = Token::new();
let t2 = Token::new();
let t3 = Token::new();
println!("{:?}\n{:?}\n{:?}", t1, t2, t3);
}
当我运行上面展示的代码片段时,它会打印出:
Token(1)
Token(2)
Token(3)
我在 Rust 参考文献中发现静态项的初始化是在编译时评估的。
当程序执行到初始化变量
COUNTER
的行时,我想知道运行时究竟发生了什么。编译后的代码看起来像什么,以便可以忽略初始化?