Nehmen wir an, wir eine Reihe von 10 000 abgeleitete Typen haben wie folgt definiert:Speicherbedarf eines ungenutzten zuweisbaren Array
TYPE type1
integer :: i
real, dimension(:), allocatable :: real_array
END TYPE1
und
type(type1), dimension(1000) :: big_array
Jetzt haben wir die folgenden Aussagen im Hauptprogramm :
DO j=1,10
allocate(big_array(j)%real_array(100))
END DO
von Komponente 11 bis Komponente 1000 big_array
, die real_array
ist zuweisbar, aber nicht zugewiesen, weil ich es nicht brauche. (Ich nehme die ersten zehn Komponenten nur als Beispiel, aber es kann ein beliebiger Index sein)
Ist es ein Problem in Bezug auf Speichernutzung/Management/Effizienz? Wie groß ist der Speicherbedarf eines "ungenutzten/nicht zugewiesenen zuweisbaren Arrays"?
Wenn ich richtig verstehe, durch eine explizite Form 'big_array' von' type1' erklärt, erstelle ich 1000 Zeiger/Deskriptoren von 'real_array' (vernachlässigbar Kilobyte Ich bin damit einverstanden, aber sie existieren), aber diese Zeiger sind nicht referenziert mit Ausnahme der ersten zehn, die auf den zugewiesenen Speicherbereich zeigen, der durch die 'allocate'-Anweisung angegeben wurde, bin ich richtig? – Coriolis
Ja, Sie haben Recht, die Deskriptoren sind da, aber sie sind als nicht zugewiesen/nirgendwo hinweisend markiert. –
Schließlich, um genauer zu sein über den ersten Teil Ihrer Antwort über die "zufällige" Speicherung, meinen Sie, dass jedes 'real_array' seine Komponenten nicht zusammenhängend gespeichert hat? Wenn das explizite Form-Array 'big_array' deklariert wird, werden seine Komponenten zusammenhängend gespeichert? – Coriolis