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后,内存布局如下: