文档指出,如果该类型具有析构函数,则不会调用它:https ://docs.rs/lazy_static/1.4.0/lazy_static/#semantics
那么我应该如何释放内存呢?
文档指出,如果该类型具有析构函数,则不会调用它:https ://docs.rs/lazy_static/1.4.0/lazy_static/#semantics
那么我应该如何释放内存呢?
那么我应该如何释放内存呢?
这个问题甚至没有错。
lazy_static 的全部意义在于对象永远存在,这就是静态,什么时候可以释放任何东西?该注释用于 non-memory Drop
,以表明如果您将lazy_static
其用于文件或临时文件,它们将不会在程序退出时被刷新/删除/……。
对于内存的东西,它会在程序退出时被系统回收,就像所有的内存一样。
那么我应该如何释放内存呢?
制作你lazy_static
的 an ,并在不再需要时Option
调用以释放内存。take()
例如:
lazy_static! {
static ref LARGE: Mutex<Option<String>> =
Mutex::new(Some(iter::repeat('x').take(1_000_000).collect()));
}
fn main() {
println!("using the string: {}", LARGE.lock().as_ref().unwrap().len());
LARGE.lock().take();
println!("string freed")
assert!(LARGE.lock().is_none());
}
正如其他人所指出的那样,在大多数情况下没有必要做这种事情,因为大多数全局变量的重点是持续到程序结束,在这种情况下,即使内存也会被操作系统回收析构函数永远不会运行。
如果全局变量与您在程序中的某个点之后不再需要的资源相关联,则上述内容可能很有用。