如何初始化非常大的数组的Vec?

时间:2017-07-15 15:55:06

标签: arrays rust

我需要创建一个巨大的NxN阵列。在堆栈上创建简单数组,因此没有成功。静态数组必须是constunsafe 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没有构造函数,所以我仍然必须将某些内容复制到该内存中。

那么,没有每晚进行新的安置,这样做的正确方法是什么?

1 个答案:

答案 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();
}