|
|
@ -106,7 +106,7 @@ println!("{}", s); // This will print `hello, world!`
|
|
|
|
1. 内存必须在运行时向操作系统请求。
|
|
|
|
1. 内存必须在运行时向操作系统请求。
|
|
|
|
2. 需要一个当我们处理完 `String` 时将内存返回给操作系统的方法。
|
|
|
|
2. 需要一个当我们处理完 `String` 时将内存返回给操作系统的方法。
|
|
|
|
|
|
|
|
|
|
|
|
第一部分由我们完成:当调用 `String::from` 时,它的实现请求它需要的内存。这在编程语言中是非常通用的。
|
|
|
|
第一部分由我们完成:当调用 `String::from` 时,它的实现 (*implementation*) 请求它需要的内存。这在编程语言中是非常通用的。
|
|
|
|
|
|
|
|
|
|
|
|
然而,第二部分实现起来就各有区别了。在有 **垃圾回收**(*garbage collector*,*GC*)的语言中, GC 记录并清除不再使用的内存,而我们作为程序员,并不需要关心他们。没有 GC 的话,识别出不再使用的内存并调用代码显式释放就是我们程序员的责任了,正如请求内存的时候一样。从历史的角度上说正确处理内存回收曾经是一个困难的编程问题。如果忘记回收了会浪费内存。如果过早回收了,将会出现无效变量。如果重复回收,这也是个 bug。我们需要 `allocate` 和 `free` 一一对应。
|
|
|
|
然而,第二部分实现起来就各有区别了。在有 **垃圾回收**(*garbage collector*,*GC*)的语言中, GC 记录并清除不再使用的内存,而我们作为程序员,并不需要关心他们。没有 GC 的话,识别出不再使用的内存并调用代码显式释放就是我们程序员的责任了,正如请求内存的时候一样。从历史的角度上说正确处理内存回收曾经是一个困难的编程问题。如果忘记回收了会浪费内存。如果过早回收了,将会出现无效变量。如果重复回收,这也是个 bug。我们需要 `allocate` 和 `free` 一一对应。
|
|
|
|
|
|
|
|
|
|
|
|