Как я могу загрузить в стек все записи Vec <T> произвольной длины?
В настоящее время я работаю с векторами и пытаюсь убедиться, что у меня есть то, что по сути является массивом моего вектора в стеке. Я не могу позвонить
Vec::into_boxed_slice
так как я динамически выделяю место в моем. Это вообще возможно?
Прочитав Rustonomicon о том, как реализовать, кажется, что он обходит указатели в куче, разыменовывая каждую запись . Я хочу вмешаться
Vec
записи из кучи в стек для быстрого доступа.
1 ответ
Вы можете использовать
#![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 &lt;T&gt; в массив?
- Как получить срез в виде массива в Rust?
Я не могу позвонить
так как я динамически выделяю место в моем
Что вы можете.
[...] кажется, идет по указателям в куче, разыменовывая при каждой записи
Для доступа к каждому члену в a требуется разыменование памяти. Для доступа к каждому члену в массиве требуется разыменование памяти. Материальной разницы в скорости здесь нет.
для быстрого доступа
Я сомневаюсь, что это будет быстрее, чем прямой доступ к данным в