7

私は最近、Fortranを(昔から)プログラムしたと言っている人と話していましたが、Fortranにガベージコレクターがあるかどうかはわかりませんでした。彼は、Fortranでmallocまたはfreeを使用しなかったと言ったので、ガベージコレクターがあると思いますか?または、Fortranにはガベージコレクタがなく、メモリリークが発生します。これは、プログラムの終了時にオペレーティングシステムによって再利用されますか?私はFortranについて何も知りませんが、それはずっと昔に使われていたことを除いては。また、グーグルで簡単に検索してみましたが、それほど速くは見つかりませんでした。

4

2 に答える 2

21

最新のFortranには、変数を宣言する多くの方法があります。単純に宣言されたアイテムは、エンティティのスコープの期間中存在します。したがって、プロシージャで宣言された「real、dimension(N):: array」は、そのプロシージャが戻ると自動的に消えます。当然、メインプログラムで宣言された変数、モジュール変数、または共通(時代遅れ)は、プログラムの期間中存続します。

変数は「allocate」を使用して動的に割り当てることができます(そのためには、allocable属性で宣言する必要があります)。プロシージャにローカルなFortran95の割り当て可能な変数は、プロシージャが返されるときに自動的に割り当てが解除されるためです。彼らはメモリをリークしません!(厳密には必要ではありませんが、とにかく変数の割り当てを明示的に解除することをお勧めするプログラマーもいます。)(もちろん、自分が知らない変数の割り当てを明示的に解除しないという意味で、メモリを浪費する可能性があります。もう必要です。)

ポインタでメモリをリークする可能性があります。ポインタを使用してメモリを割り当ててから、ポインタを別の変数に割り当てて、以前の関連付けを失うことができます。そのメモリの割り当てを解除しなかった場合は、リークが発生します。Fortranでは、他のいくつかの言語よりもポインターの必要性が少なくなっています...割り当て可能な変数を使用して多くのことを実行できます。これはより安全で、メモリリークはありません。

関連する質問:Fortranの割り当て可能な配列の有効期間ALLOCATABLE配列またはPOINTER配列?

于 2012-12-20T07:41:24.200 に答える
3

いいえ、Fortranにはガベージコレクターがありません。ただし、この程度のF90用のアドオンパッケージがあります。いいえ、使用していません。

于 2012-12-20T07:13:52.687 に答える