多次调用过程宏时,全局lazy_static变量初始化一次还是多次?
问题解答
核心结论
在目标crate的单次编译过程中,这个lazy_static变量只会初始化一次。
原因分析
- 过程宏运行在编译阶段,当你在另一个crate里多次调用该宏时,所有宏调用都处于同一个
rustc编译进程的执行上下文中。 lazy_static的特性是在程序(此处即编译期执行宏的进程)运行期间,对全局变量做延迟初始化且保证仅初始化一次。只要编译进程未重启,无论宏被调用多少次,该全局变量都只会被初始化一次。
补充说明
如果是多个独立的编译进程(比如并行编译多个依赖该宏的crate,或者多次重新编译同一目标crate),每个进程内的lazy_static变量会各自初始化一次——这是进程隔离的自然结果,和宏的调用次数无关。
内容的提问来源于stack exchange,提问作者porton
相关产品推荐
相关产品推荐

