如何初始化一个非常大的数组的 Vec? [复制]
Posted
技术标签:
【中文标题】如何初始化一个非常大的数组的 Vec? [复制]【英文标题】:How to initialize a Vec of very large arrays? [duplicate] 【发布时间】:2017-12-20 13:33:36 【问题描述】:我需要创建一个巨大的 NxN 数组。简单的数组是在堆栈上创建的,所以那里没有成功。静态数组必须是 const
或 unsafe mut
,所以这不是。
我试过Box
ing 那个数组:
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】:您可以在具有更大堆栈大小的专用线程中执行此操作:
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();
【讨论】:
我建议将此答案移至(其中一个)链接副本。以上是关于如何初始化一个非常大的数组的 Vec? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
非常大的 numpy 数组不会引发内存错误。它在哪里生活? [复制]