我可以将矢量移动到结构内而不完全复制吗?

Mai*_*tor 2 performance rust

请注意以下代码:

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, ...),它需要一个完整的副本来擦除父函数堆栈中的数据并在被调用函数的堆栈上分配).

lje*_*drz 5

此操作仅复制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)

  • @MaiaVictor是的,这就是互斥使用盒子的原因. (3认同)