-2

我目前正在使用向量并试图确保我在堆栈上拥有本质上是我的向量数组的内容。我不能打电话Vec::into_boxed_slice,因为我在我的Vec. 这是可能吗?

在阅读了有关如何实现Vec的 Rustonomicon 之后,它似乎跨越了堆上的指针,在每个条目处取消引用。我想Vec将堆中的条目分块到堆栈中以便快速访问。

4

1 回答 1

4

你可以unsized_locals在夜间 Rust 中使用该功能:

#![feature(unsized_locals)]

fn example<T>(v: Vec<T>) {
    let s: [T] = *v.into_boxed_slice();
    dbg!(std::mem::size_of_val(&s));
}

fn main() {
    let x = vec![42; 100];
    example(x); // Prints 400
}

也可以看看:


我不能打电话Vec::into_boxed_slice,因为我在我的动态分配空间Vec

你当然可以。

Vec[...] 似乎跨越了堆上的指针,在每个条目处取消引用

访问 a 中的每个成员都Vec需要内存取消引用。访问数组中的每个成员都需要内存取消引用。这里的速度没有实质性差异。

快速访问

我怀疑这会比直接访问Vec. 事实上,如果它更慢,我不会感到惊讶,因为你正在复制它。

于 2021-02-02T02:02:35.920 回答