请注意以下代码:
enum Store {
Place { val: Vec<u8> },
}
fn subst(val: Vec<u8>, store: &mut Store) {
*store = Store::Place { val }
}
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,这里subst
将移动val
到内部store
,这会导致它被复制.有没有办法这样做而不复制整个矢量?"复制"是指内存副本.我的理解是,当移动一个值时(例如vec
调用时subst(vec, ...)
,它需要一个完整的副本来擦除父函数堆栈中的数据并在被调用函数的堆栈上分配).
此操作仅复制Vec
对象,即指向其内容的指针(但不是内容本身),容量和长度,因此您不应该关注性能:
fn move_vec(v: Vec<usize>) -> Vec<usize> {
v
}
fn main() {
let v1 = vec![1, 2, 3];
println!("{:p}", &v1[1]);
let v2 = move_vec(v1);
println!("{:p}", &v2[1]); // the same location as above
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
82 次 |
最近记录: |