可能な場合はいつでも局所変数をメモリースタックに割り当てます。
このオプションは、再帰的で再入力可能なコードの記述を簡単にし、ループを並列化する際の最適化により自由度を与えることができます。
並列化オプションを使用する場合は、-stackvar を使用するようにしてください。
局所変数は、仮引数ではない変数、 COMMON 変数、外部スコープから継承された変数、または USE 文によってアクセス可能になったモジュール変数です。
-stackvar を有効にすると、局所変数は、属性 SAVE または STATIC を持たないかぎり、スタックに割り当てられます。明示的に初期化された変数は、SAVE 属性を使用して暗黙的に宣言されます。明示的に初期化されず、いくつかのコンポーネントが初期化されている構造変数は、デフォルトでは、SAVE を使用して暗黙的に宣言されません。また、SAVE または STATIC 属性を持つ変数と同等な変数は、暗黙的に SAVE または STATIC です。
静的に割り当てられた変数は、プログラムによって明示的に値を指定されないかぎり、暗黙的に 0 に初期化されます。スタックに割り当てられた変数は、構造変数のコンポーネントがデフォルトで初期化できる場合を除き、暗黙的に初期化されません。
-stackvar を使用してサイズが大きい配列をスタック上に割り当てると、スタックからオーバーフローし、セグメント例外が発生する場合があります。このような場合はスタックサイズを大きくする必要があります。
プログラムを実行する初期スレッドには、メインスタックがあり、マルチスレッド化されたプログラムの各ヘルパースレッドには、それぞれスレッドスタックがあります。
メインスタックのデフォルトのサイズは、約 8M バイトです。デフォルトのスレッドスタックサイズは、32 ビットシステムで 4M バイト、64 ビットシステムで 8M バイトです。引数なしで limit コマンドを実行すると、現在のメインスタックのサイズが表示されます。-stackvar を使用したときにセグメント例外が発生する場合は、メインスタックとスレッドスタックのサイズを大きくしてみてください。
例: 現在のメインスタックのサイズを表示します。
demo% limit cputime 制限なし filesize 制限なし datasize 523256K バイト stacksize 8192K バイト <--- coredumpsize 制限なし descriptors 64 memorysize 制限なし demo% |
例: メインスタックのサイズを 64M バイトに設定します。
demo% limit stacksize 65536 |
例: 各スレッドスタックのサイズを 8M バイトに設定します。
demo% setenv STACKSIZE 8192 |
各スレーブスレッドで使用されるスタックサイズは、 STACKSIZE 環境変数に値 (キロバイト単位) を指定することで設定できます。
% setenv STACKSIZE 8192
この例は、各スレーブスレッドのスタックサイズを 8M バイトに設定します。
STACKSIZE 環境変数は、接尾辞 B、K、M、または G の付いた数値も受け付けます。これらの接尾辞はそれぞれ、バイト、キロバイト、メガバイト、ギガバイトを表します。デフォルトはキロバイトです。
並列化と -stackvar を併用する方法の詳細は、『Fortran プログラミングガイド』の「並列化」の章を参照してください。limit コマンドについての詳細は、csh(1) を参照してください。
-xcheck=stkovf フラグを指定してコンパイルすると、スタックオーバーフロー状態に対する実行時の検査が有効になります。「3.4.120 -xcheck=keyword」を参照してください。