我想将一个非常大的值从一个盒子复制(而不是移动)到一个向量中。执行此操作的正常方法(取消引用框)意味着该值被暂时复制到堆栈上,这会破坏它。这是一个示例和一个可以复制它的 Playground 链接。
fn main() {
let big_value = Box::new([0u8; 8 * 1024 * 1024]);
let mut vec = Vec::new();
vec.push(*big_value);
}
由于 Box 和 Vec 都在堆上,因此应该可以在不通过堆栈的情况下进行复制。这里最好的解决方案是什么?
最佳答案
请参阅我在 Reddit 上发布的帖子中的答案:https://old.reddit.com/r/rust/comments/n2jasd/question_copy_big_value_from_box_into_vec_without/gwmrcxp/
您可以使用vec.extend_from_slice(std::slice_from_ref(&big_value));
来完成此操作。这不执行分配,只是将 big_value
从堆复制到 vec 中的新槽中。
关于memory-management - 将 Box 中的大值复制到 Rust 中的 Vec 中,而不会破坏堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67347376/