From 9d11b639d56de448cc8ee3e072ba06a579759785 Mon Sep 17 00:00:00 2001 From: stirlingx Date: Fri, 21 Jan 2022 10:14:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=87=E7=82=B9=E7=AC=A6=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- book/contents/advance/smart-pointer/box.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/book/contents/advance/smart-pointer/box.md b/book/contents/advance/smart-pointer/box.md index 6a6e4574..590ee843 100644 --- a/book/contents/advance/smart-pointer/box.md +++ b/book/contents/advance/smart-pointer/box.md @@ -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,**它只是在帮我们成为那个更好的程序员,而这些苦难终究成为我们走向优秀的垫脚石**。