私はこれをどこにも見つけることができませんでした。4つの質問があります(厳密に関連しています):
1)このようにfortranで派生型を定義すると
TYPE :: node
INTEGER :: int
REAL :: REALfirst
REAL :: REALsecond
END TYPE
TYPE(node) :: var
allocate(var)
上記の割り当ての後、整数用に 4 バイト、2 つの単精度実数用に残りの 8 バイト、合計 12 バイトを占有します。それらはメモリ内に継続的に配置されていますか? また、コンピューターは変数の型に関する情報をどのように保存するのでしょうか?それを保存するには、追加のメモリが必要だと思います。
2) 上記の例では、代わりに
TYPE(node) :: var
私は書いたでしょう:
TYPE(node),POINTER :: var
32 ビットの実行可能ファイルをコンパイルした場合、ALLOCATE ステートメントは上記の例と同じ量のメモリを割り当てると思います。それが正しいか?
3)ここで、型を宣言するとしましょう
TYPE :: node
INTEGER :: int
TYPE(node), POINTER :: BEFORE
TYPE(node), POINTER :: AFTER
END TYPE
TYPE(node) :: var
allocate(var)
ここで (32 ビットでコンパイルされた場合)、整数に 4 バイト、2 つのポインターに残りの 8 バイトを割り当て、合計 12 バイトになります。それは正しいですか?また、コンピューターは変数の型に関する情報をどのように保存するのでしょうか?
4) (3) の例で ALLOCATE(var%BEFORE) と書くと、残りの 12 バイトが派生型 node を持つ変数に割り当てられ、整数型の 4 バイトがポインター var%BEFORE に割り当てられます (参照例 3) が解放されましたね。
ありがとうございます。