如何解决将大值从 Box 复制到 Rust 中的 Vec 中,而不会炸毁堆栈
我想将一个非常大的值从一个盒子复制(而不是移动)到一个 vec 中。执行此操作的正常方法(取消引用框)意味着将值临时复制到堆栈中,这会破坏它。这是一个示例和一个可以复制的 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 中的新槽中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。