1

Fortran の Equivalence(a1,a2) ステートメントに a1 と a2 という 2 つの変数が表示され、同じメモリ空間を占有することを理解しています。これは、a1 と a2 の両方がそのプロシージャ内のローカル変数であるプロシージャで発生するとします。

これは、メモリ内に a1 と a2 のコピーしか持てないということですよね?値の 1 つが上書きされるためです。プロシージャ全体で a1 をメモリ ロケーションに保持し、a2 をレジスタに保持することができますが、これで問題ありませんか?

私の質問は基本的に次のとおりです。手順全体で a1 を登録簿に保管できますか?

はい...レジスタを使い果たし、a1をメモリに保存しなければならない場合を除きます。次に、a2 を上書きしてその値を失い、変数 a1 と a2 の両方が実際に a1 の値を指します。

4

2 に答える 2

5

a1ステートメントでは、これらの 2 つの変数が同じストレージを占有することを意味しますa2equivalence一方を変更すると、それらが異なる型の変数 (たとえば、a1整数でa2実数) であっても、もう一方が変更されます。Fortran では、変数がレジスターにあることを指定する方法がありませんequivalence。また、コンパイラーが自動的にそうするのをステートメントが禁止する可能性が非常に高いようです。

そう

プロシージャ全体で a1 をメモリ ロケーションに保持し、a2 をレジスタに保持することができますが、これで問題ありませんか?

適用外です。

... を使用しないことを強くお勧めしequivalenceます ... は有害であり、レガシー コードをサポートする言語でのみ保持される可能性があります。型間でデータを転送する必要がある場合は、最新の Fortran メソッドがtransfer組み込みです。

于 2013-04-28T21:35:23.360 に答える
2

使用する唯一の理由equivalenceは、同じものに 2 つの名前を付けることです。Fortran プログラマーとして、レジスターなどを制御することはできません。メモリとレジスタについて考えないでください。2 つの名前を持つ 1 つの「ボックス」があるとします。どちらの名前を使用しても、同じボックスに格納または取得しています。

于 2013-04-28T21:36:03.010 に答える