Ответ 1
Проблема заключается в том, что массив передается функции Box::new
в качестве аргумента, что означает, что он должен быть создан первым, что означает, что он должен быть создан в стеке.
Вы просите компилятор создать 8 мегабайт данных в стеке: это то, что переполняет его.
Решение состоит в том, чтобы не использовать массив фиксированного размера вообще, а < <21 > . Самый простой способ создать Vec
из 8 миллионов 10.0
:
fn main() {
const SIZE: usize = 1024 * 1024;
let v = vec![10.0; SIZE];
}
Или, если по какой-то причине вы предпочитаете использовать итераторы:
use std::iter::repeat;
fn main() {
const SIZE: usize = 1024 * 1024;
let v: Vec<_> = repeat(10.0).take(SIZE).collect();
}
Это должно выполнять только одно распределение кучи.
Изменить. Также обратите внимание, что впоследствии вы можете взять Vec
и превратить его в Box<[_]>
с помощью into_boxed_slice
.