我需要创建一个巨大的NxN阵列。在堆栈上创建简单数组,因此没有成功。静态数组必须是const
或unsafe mut
,因此这是一个no。
我试过Box
那个数组:
const N: usize = 1000000;
let mut boxed: Box<[usize; N]> = Box::new([0; N]);
boxed[1] = 1;
但是,无论如何,这大概会溢出堆栈,因为它会创建一个临时数组,然后将其复制到Box
。
我尝试了一个Vec
数组:
const N: usize = 1000000;
let mut v = Vec::<[usize; N]>::with_capacity(10);
v.push([0; N]);
具有相同的结果。据我所知with_capacity
只分配内存;因为Rust没有构造函数,所以我仍然必须将某些内容复制到该内存中。
那么,没有每晚进行新的安置,这样做的正确方法是什么?
答案 0 :(得分:0)
您可以在具有更大堆栈大小的专用线程中执行此操作:
use std::thread;
fn main() {
const N: usize = 10000000;
let builder = thread::Builder::new().name("reductor".into()).stack_size(
1024 * 1024 *
1024,
);
let handler = builder
.spawn(|| {
let mut v = Vec::<[usize; N]>::with_capacity(10);
v.push([0; N]);
println!("{:?}", v[0][0]);
})
.unwrap();
handler.join().unwrap();
}