====== Dynamische Speicherverwaltung ====== In Fortran müssen alle Variablen vor der ersten Anweisung eines Blocks definiert werden. Dh. der Compiler kann bereits beim Start eines Unterprogramms Speicherplatz für die Variablen anfordern, und muss sich während der Laufzeit keine Gedanken machen. Dieses Verhalten bringt aber das Problem mit sich, dass Felder nicht dynamisch alloziert werden können, dh. dass nur Felder fester Größe vereinbart werden können. ===== Allocatable ===== In Fortran 90 gibt es das Attribut ''ALLOCATABLE'', um den Compiler mitzuteilen, dass erst während des Programmlaufs Speicher geholt werden soll. program main integer, allocatable :: i double precision, allocatable :: d real, dimension(:), allocatable :: r ! Anweisugnen end program Das Feld ''r'' wird mit einem Platzhalter als Dimensionsangabe festgelegt. So können wir später im Programmlauf entscheiden, wie groß das Feld sein soll. ===== Speicher anfordern ===== Speicher anfordern ist mit der Funktion ''allocate'' möglich. Dabei kann für Felder in Klammern hinter dem Variablennamen festgelegt werden, wie viele Speicherstellen benötigt werden (also wie groß das Feld sein soll). Die Größenangabe kann auch eine Variable sein. allocate (i) allocate (d) i=123 allocate (r(i)) ===== Speicher freigeben ===== Zum Freigeben von Speicher wird die Funktion ''deallocate'' verwendet. Dabei wird lediglich der Name des freizugebenen Speicherstücks angegeben: deallocate (i) deallocate (d) deallocate (r) ===== Abfrage ob ein Feld alloziert ist ===== In Fortran ist es möglich abzufragen, ob ein Feld bereits alloziert ist. Falls nicht, könnte das Feld bspw. alloziert werden. if (allocated(r) == .FALSE.) then allocate (r(10)) endif