From de725f1230937773e2d9e2a0478a801a9f4b97f4 Mon Sep 17 00:00:00 2001 From: "Peng Hailin," Date: Tue, 12 Dec 2023 21:52:09 +0800 Subject: [PATCH] Refining Ch04. --- src/ownership/about_ownership.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ownership/about_ownership.md b/src/ownership/about_ownership.md index afb7ac7..a8f3b1c 100644 --- a/src/ownership/about_ownership.md +++ b/src/ownership/about_ownership.md @@ -206,7 +206,7 @@ fn main() { 请看图 4-1,了解 `String` 的到底发生了什么。一个 `String` 由三部分组成(如左图所示):指向存放该字符串内容的内存的一个指针、一个长度与一个容量。这组数据,是存储在栈上的。而图的右边,则是堆上存放着内容的内存。 -![Rust 中 `String` 类型的本质](images/Ch04_01.svg) +![Rust 中 `String` 类型的本质](../images/Ch04_01.svg) *图 4-1:保存绑定到 `s1` 的值 `"hello"` 的 `String` 在内存中的表示* @@ -218,14 +218,14 @@ fn main() { 当我们把 `s1` 赋值给 `s2` 时,这个 `String` 数据会被复制,这意味着我们拷贝了栈上的指针、长度和容量。我们不会拷贝该指针所指向的堆上数据。换句话说,内存中的数据表示,会如下图 4-2 所示。 -![有着变量 `s1` 的指针、长度与容量拷贝的变量 `s2` 在内存中的表示](images/Ch04_02.svg) +![有着变量 `s1` 的指针、长度与容量拷贝的变量 `s2` 在内存中的表示](../images/Ch04_02.svg) *图 4-2:变量 `s2` 在内存中的表示,其有着 `s1` 的指针、长度和容量的副本* 如果 Rust 也拷贝了堆数据,那么内存的表示就不会如图 4-3 所示。如果 Rust 这样做了,那么在堆上的数据很大时,操作 `s2 = s1` 在运行时的性能方面,可能会非常昂贵。 -![`s2 = s1` 操作的另一种可能:Rust 拷贝内存堆数据](images/Ch04_03.svg) +![`s2 = s1` 操作的另一种可能:Rust 拷贝内存堆数据](../images/Ch04_03.svg) *图 4-3:如果 Rust 也复制了堆数据,则 `s2 = s1` 可能会执行的另一种可能性* @@ -281,7 +281,7 @@ error: could not compile `ownership_demo` (bin "ownership_demo") due to previous 若在使用其他编程语言时,曾听说过 *浅拷贝(shallow copy)* 和 *深拷贝(deep copy)* 这两个说法,那么这种对指针、长度与容量的拷贝,而未拷贝数据的概念,或许听起来像是进行了一次浅拷贝。但由于 Rust 还将第一个变量进行了失效处理,因此这里就不叫浅拷贝,而叫做 *迁移(move)*。在这个示例中,就会讲,变量 `s1` 已被 *迁移* 到变量 `s2` 里了。因此真实发生的事情,就是下图 4-4 显示的那样: -![在变量 `s1` 失效后内存中的表示](images/Ch04_04.svg) +![在变量 `s1` 失效后内存中的表示](../images/Ch04_04.svg) *图 4-4:在变量 `s1` 失效后内存中的表示*