Έτσι όπως τα λέει ο logari81 είναι. Αλλά εγώ να ρωτήσω κάτι άλλο: κάνεις πουθενα allocate A(10000000) όπου Α ένας πίνακάς σου και 10000000 ένας πολύ μεγάλος αριθμός; Αν ναι, τότε δε φταίει ο μεταγλωττιστής αλλά το μηχάνημά σου. Για να δεις τα όρια της μνήμης για ένα κέλυφος δώσε:
- Κώδικας: Επιλογή όλων
ulimit -a
Αν δε με πιστεύεις δοκίμασε το εξής:
- Κώδικας: Επιλογή όλων
call foo()
end
subroutine foo()
real*8, allocatable :: A(:,:)
allocate(A(100,100))
end
και μετά
- Κώδικας: Επιλογή όλων
call foo()
end
subroutine foo()
real*8, allocatable :: A(:,:)
allocate(A(100000000000,100000000000))
end
Kαι θα πάρεις το ίδιο σφάλμα. Αυτό σημαίνει ή ότι θα αυξήσεις το όριο με την εντολή ulimit, αλλά να ξέρεις ότι θα προσπαθεί ο υπολογιστής να δεσμεύσει τη μνήμη και θα σέρνεται. Συνεπώς, αν θες το πρόγραμμα να λειτουργήσει σωστά, το ξανασχεδιάζεις ώστε να δεσμεύει σταδιακά τη μνήμη που χρειάζεσαι (είμαι σίγουρος ότι δε χρησιμοποιείς όλα τα δεδομένα ταυτόχρονα) ή αυξάνεις το όριο με την ulimit και βλέπεις πώς τα resources δεσμεύονται μέχρι να μη μπορείς να κάνεις τίποτε. Για ότι απορίες, ακόμη και σχετικά με προγραμματισμό σε fortran, μη διστάσεις να ρωτήσεις.