2012-03-07 10 views
1

Fortran77でコードを最適化しようとしていますが、ルーチンやヘッダファイル内で次のように宣言された配列がポインタや構造体の配列であるかどうかを知りたいのですが:fortran77:ポインタの配列または構造の配列?

case 1:実際の* 8 XRED(maxatm)

ケース2:共通/個/ X(maxatm)

私はすでにインターネット上で検索しましたが、私はこの上の任意の情報を見つけることができませんでした、私が見つけた唯一のもの配列にルーチンを渡すと、それは参照によって渡されます。しかし、ヘッダファイルやルーチンの中で宣言されたときには何も見つかりませんでした。

ありがとうございます!

+0

私はあなたの質問を理解していません。最初に、標準のfortran 77にはヘッダーファイルの概念がないので、あなたがそれらの意味を正確に説明してください。また、f77にはポインタや構造体もありません。参照渡しで見つかったものについては、標準では何も言わないので、おそらく最も一般的な方法ですが、依然として実装に依存しています。 – eriktous

+0

彼はちょうど何が起こっているのか聞いています。 F77のヘッダーファイルは、include/COMMON(.CMNなど)ファイルで、Cでの.hヘッダーと基本的に同じ役割を果たします(わずかに異なります)。 F77はフレームワークに 'POINTER'を持っています。仕様から: "各ポインタには対応する変数のアドレスが含まれます ポインタベースの変数は、POINTER命令のポインタとペアになる変数です。ポインタベースの変数は通常、単にベースの変数と呼ばれます。アドレスを含む整数変数。 " – MoonKnight

+0

さらに、構造とポインタによる質問の意味は、F77コンパイラがメモリを管理するために何が行われたのかと思います。標準は明確で、 'SUBROUTINE'と' FUNCTION'に渡された値はすべて、参照値ではありません。また、コンパイラの選択によってF77に 'STRUCTURE'があります。 – MoonKnight

答えて

2

.f77 'ヘッダー'/common/.CMNファイル内では、変数をプログラム内で使用することを宣言しています。これらの変数に必要なスペースは、ヘッダー宣言を含む各ファイルのコンパイル時に確立されます。これらの変数は、彼らがINCLUDE 'My.CMN'経由.f77ファイルで宣言されるたびに作成され

REAL*8 XEDG(-2:MAXNB+4) ! left x-edges of cells  
REAL*8 YEDG(-2:MAXNB+4) ! left y-edges of cells 
REAL*8 XC(-2:MAXNB+4) ! X CELL CENTERS 
REAL*8 YC(-2:MAXNB+4) ! Y CELL CENTERS 

含まれている「My.CMN」のようにします。

しかし、

COMMON /GRID/ XEDG,YEDG,XC,YC 

共通ブロックを使用すると、変数が指定された.CMNファイル(または何でも)内に含まれるコンパイラに指示しますが、一部にされている共有/グローバル延長、ここでコンパイラはへのポインタを使用します。メモリ内のスペースを解放する。

The COMMON statement defines a block of main memory storage so that 
different program units can share the same data without using arguments. 

は、Sun FORTRAN 77 4.0コンパイラリファレンスマニュアルCOMMONhereの詳細については、hereを参照してください。

関連する問題