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

标签 arrays rust

<分区>

我需要创建一个巨大的 NxN 数组。简单的数组是在堆栈上创建的,所以没有成功。静态数组必须是 constunsafe mut,所以不行。

我试过 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 没有构造函数,我仍然必须将某些内容推送(即)复制到该内存中。

那么,在不每晚都去放置新元素的情况下,这样做的正确方法是什么?

最佳答案

您可以在具有更大堆栈大小的专用线程中执行此操作:

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

关于arrays - 如何初始化非常大的数组的 Vec?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45120080/

相关文章:

java - Java Arrays.hashcode() 的 hashcode 实现是否均匀分布

rust - 如果类型没有实现复制,我如何将具体类型与选项的Option进行比较?

rust - 在这种情况下如何决定生命周期注解?

arrays - 在不知道索引的情况下在数组中查找字典 mongodb

php - 具有回调的唯一数组值

c++ - 在函数内部初始化浮点矩阵

javascript - 动态向下钻取嵌套的对象数组

rust - 类型别名引入错误 : "cast requires that ` *variable *` is borrowed for ` 'static`"

rust - 为什么在 &mut T 工作时,我不能使用 &mut Box<T> 一次多次借用可变变量?

rust - 如何在Rust的子过程中准备stdout/stderr