Sun Studio 12: Fortran ライブラリ・リファレンス

1.4.35.1 記憶領域の割り当て: malloc malloc64

malloc() 関数は、次のように呼び出します。

k = malloc( n )

n

INTEGER

入力 

記憶領域のバイト数 

戻り値 

INTEGER(Cray POINTER)

出力 

k>0: k は割り当てられた記憶領域の開始アドレス

k=0: エラー

 

-m64 を使って、64 ビット環境用にコンパイルした場合は、INTEGER*8 ポインタ値が戻る。次に示す注を参照。


注 –

この関数は、Fortran 95 では組み込み関数ですが、FORTRAN 77 では外部関数でした。64 ビット環境で動作するようにコンパイルされたプログラムでは、malloc() 関数とその出力を受け取る変数を INTEGER*8 と宣言する必要があります。関数 malloc64(3F) は、プログラムを 32 ビット環境と 64 ビット環境間で可搬性を持たせるために提供された関数です。

k = malloc64( n )

n

INTEGER*8

入力 

記憶領域のバイト数 

戻り値 

INTEGER*8

(Cray POINTER)

出力 

k>0: k は割り当てられた記憶領域の開始アドレス

k=0: エラー


これらの関数は、記憶領域を割り当て、その領域の開始アドレスを返します。64 ビット環境では、この返されたバイトアドレスは、INTEGER*4 の数値範囲外になる可能性があります。 受け取り側の変数では INTEGER*8 と宣言し、メモリーアドレスが切り捨てられないようにする必要があります。この記憶領域は、初期化できません。 そのため記憶領域が、ある値、特にゼロに事前設定されていることを前提としないでください。

例: malloc() を使用したコード部分


       parameter (NX=1000)
       integer ( p2X, X )
       real*4 X(1)
       …
       p2X = malloc( NX*4 )
       if ( p2X .eq. 0 ) stop 'malloc: 割り当て不可'
       do 11 i=1,NX
 11         X(i) = 0.
       …
       end

前述の例では、 p2X で指定される 4,000 バイトのメモリーを獲得し、この領域を 0 に初期化しています。