Rust 程序设计语言 简体中文版 1.85.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 13.4. 性能比较:循环对迭代器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 这个表现形式看起来并不像图 4-3 中的那样,如果 Rust 也拷贝了堆上的数据,那么内存看起 来就是这样的。如果 Rust 这么做了,那么操作 s2 = s1 在堆上数据比较大的时候会对运行时 性能造成非常大的影响。 73/562Rust 程序设计语言 简体中文版 s2 name value ptr len 5 capacity 5 indexvalue 0 h 1 e 2 l 这样就解决了我们的问题!因为只有 s2 是有效的,当其离开作用域,它就释放自己的内存, 完毕。 另外,这里还隐含了一个设计选择:Rust 永远也不会自动创建数据的 “深拷贝”。因此,任何 自动的复制都可以被认为是对运行时性能影响较小的。 作用域与赋值 作用域、所有权和通过 drop 函数释放内存之间的关系反过来也同样成立。当你给一个已有的 变量赋一个全新的值时,Rust 将会立即调用 drop 并释放原始值的内存。例如,考虑如下代0 码力 | 562 页 | 3.23 MB | 24 天前3
共 1 条
- 1













