2017-07-15 10 views
0

巨大なNxN配列を作成する必要があります。単純な配列はスタック上に作成されるので、そこでは成功しません。静的配列はconstまたはunsafe mutでなければなりません。非常に大きな配列のVecを初期化するには?

私はその配列をINGのBoxを試してみました:

const N: usize = 1000000; 
let mut boxed: Box<[usize; N]> = Box::new([0; N]); 
boxed[1] = 1; 

しかし、それは、その後Boxにコピーされた一時的な配列を作成しますので、それは、おそらく、とにかくスタックをオーバーフローします。

Iは、配列のVecを試みた:

const N: usize = 1000000; 
let mut v = Vec::<[usize; N]>::with_capacity(10); 

v.push([0; N]); 

同じ結果と。私の知る限り、with_capacityはメモリだけを割り当てます。 Rustはコンストラクタを持っていないので、私はまだそのメモリに何かをプッシュ(すなわち)しなければなりません。

だから、夜間に新しいプレースメントに行くことなく、それを行う正しい方法は何ですか?

あなたは大きなスタックサイズを持つ専用のスレッドでそれを行うことができ

答えて

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

私はリンク重複(の1つ)にこの回答を移動することをお勧めしたいです。 – Shepmaster

関連する問題