Rust 程序设计语言 简体中文版 1.85.0
在栈上。右侧则是堆 上存放内容的内存部分。 s1 name value ptr len 5 capacity 5 indexvalue 0 h 1 e 2 l 3 l 4 o 图 4-1:将值 "hello" 绑定给 s1 的 String 在内存中的表现形式 长度表示 String 的内容当前使用了多少字节的内存。容量是 String 从分配器总共获取了多少 字节的内存。 ptr len 5 capacity 5 indexvalue 0 h 1 e 2 l 3 l 4 o s2 name value ptr len 5 capacity 5 图 4-2:变量 s2 的内存表现,它有一份 s1 指针、长度和容量的拷贝 这个表现形式看起来并不像图 4-3 中的那样,如果 Rust 也拷贝了堆上的数据,那么内存看起 来就是这样的。如果 Rust 5 capacity 5 indexvalue 0 h 1 e 2 l 3 l 4 o 图 4-3:另一个 s2 = s1 时可能的内存表现,如果 Rust 同时也拷贝了堆上的数据的话 之前我们提到过当变量离开作用域后,Rust 自动调用 drop 函数并清理变量的堆内存。不过图 4-2 展示了两个数据指针指向了同一位置。这就有了一个问题:当 s2 和 s1 离开作用域,它们 都会尝试释放相同的内存。这是一个叫做0 码力 | 562 页 | 3.23 MB | 9 天前3
共 1 条
- 1