|
|
|
@ -246,11 +246,11 @@ fn gen_static_str() -> &'static str{
|
|
|
|
|
#### 使用场景
|
|
|
|
|
光看上面的描述,大家可能还是云里雾里、一头雾水。
|
|
|
|
|
|
|
|
|
|
那么我说一个简单的场景,**你需要一个在运行期初始化的值,但是可以全局有效,也就是和整个程序活得一样久**, 那么久可以使用`Box::leak`,例如有一个存储配置的结构体实例,它是在运行期动态插入内容,那么就可以将其转为全局有效,虽然`Rc/Arc`也可以实现此功能,但是`Box::leak`是性能最高的.
|
|
|
|
|
那么我说一个简单的场景,**你需要一个在运行期初始化的值,但是可以全局有效,也就是和整个程序活得一样久**, 那么久可以使用`Box::leak`,例如有一个存储配置的结构体实例,它是在运行期动态插入内容,那么就可以将其转为全局有效,虽然`Rc/Arc`也可以实现此功能,但是`Box::leak`是性能最高的。
|
|
|
|
|
|
|
|
|
|
## 总结
|
|
|
|
|
`Box`背后式调用`jemalloc`来做内存管理,所以堆上的空间无需我们的手动管理。与此类似,带GC的语言中的对象也是借助于box概念来实现的,一切皆对象 = 一切皆box, 只不过我们无需自己去box罢了。
|
|
|
|
|
|
|
|
|
|
其实很多时候,编译器的鞭笞可以助我们更快的成长,例如所有权规则里的借用、move、生命周期就是编译器在教我们做人,哦不是,是教我们深刻理解堆栈、内存布局、作用域等你在其它GC语言无需去关注的东西。刚开始是很痛苦,但是一旦熟悉了这套规则,写代码的效率和代码本身的质量将飞速上升,直到你用Java开发的效率写出Java代码不可企及的性能和安全性,最终Rust语言所谓的开发效率低、心智负担高,对你来说终究不是个事。
|
|
|
|
|
|
|
|
|
|
因此, 不要怪Rust,**它只是在帮我们成为那个更好的程序员,而这些苦难终究成为我们走向优秀的垫脚石**,
|
|
|
|
|
因此,不要怪Rust,**它只是在帮我们成为那个更好的程序员,而这些苦难终究成为我们走向优秀的垫脚石**。
|
|
|
|
|