C コードでは、次のようなものがよく見られます。
malloc(sizeof(int)*100);
これは、100 int を保持するのに十分な大きさのメモリ ブロックへのポインタを返します。fortranに同等のものはありますか?
使用事例:
次のように開かれるバイナリファイルがあります。
open(unit=10,file='foo.dat',access='stream',form='unformatted',status='old')
このファイルには、20 個の整数、20 個の実数、80 個の文字、さらに別N
の実数を含むヘッダーで構成される「レコード」が含まれていることを知っています。各ファイルには数百のレコードが含まれる場合があります。基本的に、このファイルの特定のレコードを読み書きしたいと思います (N
簡単にするために固定定数であると仮定します)。
各データ型のサイズがわかっていれば、書き込みたいファイル内の位置を簡単に計算できます。
header_size = SIZEOF_INT*20 + SIZEOF_FLOAT*20 + SIZEOF_CHAR*80
data_size = N*SIZEOF_FLOAT
position = (record_num-1)*(header_size+data_size)+1
現在、私は持っています
!Hardcoded :-(
SIZEOF_INT = 4
SIZEOF_FLOAT = 4
SIZEOF_DOUBLE = 8
SIZEOF_CHAR = 1
より良い方法はありますか?
制約:
- このコードは、さまざまなコンパイラを使用してさまざまなプラットフォームで実行できるようになっています。標準に準拠したソリューションが間違いなく優先されます。