memory-management - 将 Box 中的大值复制到 Rust 中的 Vec 中,而不会破坏堆栈

标签 memory-management rust stack-overflow

我想将一个非常大的值从一个盒子复制(而不是移动)到一个向量中。执行此操作的正常方法(取消引用框)意味着该值被暂时复制到堆栈上,这会破坏它。这是一个示例和一个可以复制它的 Playground 链接。

fn main() {
    let big_value = Box::new([0u8; 8 * 1024 * 1024]);
    let mut vec = Vec::new();
    vec.push(*big_value);
}

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=5998cff185dc209e7a1e676d41850ff4

由于 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/

相关文章:

linux - 即使在内存压力下,如何将可执行代码保留在内存中?在 Linux 中

asp.net - 文件下载时出现 System.OutOfMemoryException

rust - 同时匹配 Result::Err 或 Result::Ok 中的可选字段

types - 在类型别名上调用静态方法

memory - Haskell 堆栈溢出

java - 什么是堆栈溢出错误?

ios - 适用于 iOS 的 Google Maps SDK 不断增加内存使用量

objective-c - View 和其他对象的泄漏

memory - 从编译为 Emscripten 的 Rust 获取 Javascript 中的数组

delphi - delphi中的堆栈溢出错误