From 366344bd9fa91b3aca9f6205735979ee52a15041 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BB=A4=E7=8B=90=E4=B8=80=E5=86=B2?= <43949039+anonymousGiga@users.noreply.github.com> Date: Wed, 17 May 2023 14:58:38 +0800 Subject: [PATCH] Update chapter_3_7.md --- src/chapter_3/chapter_3_7.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/chapter_3/chapter_3_7.md b/src/chapter_3/chapter_3_7.md index 06cce14..92f183a 100644 --- a/src/chapter_3/chapter_3_7.md +++ b/src/chapter_3/chapter_3_7.md @@ -139,6 +139,7 @@ fn main() { } ``` 在第2行定义String类型时,并不能确定最终字符串的大小,所以字符串内容本身应该存储在堆上。结合什么String类型的本质的内容,可以得到String类型的存储如下: + ![注释](../../assets/5.png) String类型本身是三个字段(指针、长度、容量),在编译时是已知的大小,存储在栈上;String类型绑定的字符串(在上面代码中是“AB”)在编译时大小未知,是运行时在堆上分配内存,分配后的内存地址保存在String类型的指针字段中,内存大小保存在cap字段中,内存上存储的字符串长度保存在len字段中。 @@ -170,6 +171,7 @@ fn main() { } ``` s是String类型,字符串“Hello world!”是存储在堆内存上的,其内存布局如下: + ![注释](../../assets/6.png) 当执行let s1 = s后,内存布局如下: