2017-05-16 14 views
2

私はラムダ微積分で遊んでいて、(非常に)長い関数チェーンを構築して計算できるようにもう少しスタックスペースが必要です。再帰制限(#![recursion_limit = "100"])を増やすのと同様に、クレートのためにそれを増やす方法はありますか?Rustライブラリで使用できるスタックサイズを増やすにはどうすればよいですか?

クレートはライブラリであり、ターゲットオペレーティングシステムに関係なくスタック集中型の操作を実行できるようにしたいと考えています。

+3

stコンパイラがスタック上で動作するスタックの大きさ**または** [あなたの*プログラムのスタック](http://stackoverflow.com/questions/29937697/how-to-set-the-thread-stack-size-コンパイル時に)? –

+0

@LukasKalbertodt貨物検査中に問題が発生し、オーバーフローしたスレッドは 'libname-hash.exe'だったので、結局プログラムだと思います。 – ljedrz

答えて

1

が、私はできたstd::thread::Builderを使用して:他のシステムでは、おそらく他のツールを使用します指定されたスタックサイズを持つ余分なスレッドを作成し、その内部にスタックの多い操作を実行します。

fn huge_reduction() { 
    let builder = thread::Builder::new() 
        .name("reductor".into()) 
        .stack_size(32 * 1024 * 1024); // 32MB of stack space 

    let handler = builder.spawn(|| { 
     // stack-intensive operations 
    }).unwrap(); 

    handler.join().unwrap(); 
} 
3

これは言語機能ではなく、オペレーティングシステムの機能です。 * nixシステムでは、ulimitのようなツールを使用します。

+6

@ljedrz:['std :: thread :: Builder'](https://doc.rust-lang.org/1.8.0/std/thread/struct.Builder.html)で指定することができますプログラム内から作成されたスレッドのスタックサイズ* main *スレッドのスタックサイズのみがOSによって設定されます。 @MatthieuM。 –

+0

あなたは本当に256MBのようなスタックサイズを設定できますか?また、Rust 1.8のドキュメントにリンクしていますか? [current docs](https://doc.rust-lang.org/std/thread/struct.Builder.html)にリンクする方がはるかに優れています。これは* unit * 'stack_size'の内容を明確にしています。 – Shepmaster

+0

@Shepmaster:私はリンクのためにGoogleを非難します;)最大スタックサイズに関しては、実際にはOSによって、または基本的なスレッド実装によって制限されるかもしれませんが、Rustからチューニングできます。 @MatthieuM。 –

関連する問題