Czy istnieje sposób tworzenia tablic o zmiennych rozmiarach w Fortranie na stosie? Allocate() nie działa dla mnie, ponieważ umieszcza tablicę na stercie. Może to prowadzić do problemów z równoległością (zobacz moje inne pytanie: OpenMP: poor performance of heap arrays (stack arrays work fine)). Oczywiście, pewne inteligentne zarządzanie pamięcią pozwoliłoby obejść ten problem, ale zarządzanie pamięcią w Fortranie brzmi głupio.Zmienne tablice rozmiarów w Fortranie bez przydziału()
Zasadniczo szukam dla Fortran równowartość co następuje: C:
scanf("%d", N);
int myarray[N];
do ponownego iteracyjne: Nie chcę
Integer, PARAMETER :: N=100
Integer, Dimension(N) :: myarray
bo ten określa rozmiar tablicy przy kompilacji czas. Nie chcę też, ponieważ umieszcza tablicę na stercie.
Pomoc bardzo doceniana. Byłem bardzo szczęśliwy z tablicami Allocatable aż do ostatniego spotkania z problemem w powyższym pytaniu. Jeśli istnieje negatywna odpowiedź na to pytanie, bardzo bym docenił link do źródła.
Edycja: patrz komentarze do odpowiedzi M.S.B. Elegancki sposób robienia tego tylko stał się możliwy w Fortran 2008, i odbywa się to w konstrukcji block
.
Dzięki, M.S.B.! Tak samo ciężki jak w porównaniu z tablicą C 'int array [N]', robi to. – drlemon
Możesz zrobić coś bliższego C, tj. Deklaracji w środku kodu, używając konstrukcji blokowej Fortran 2008. Zobacz na przykład str. 12 ftp://ftp.nag.co.uk/sc22wg5/N1701-N1750/N1729.pdf. Nie wiem, które kompilatory go obsługują, ani czy wspierają go przy pomocy OpenMP. –
Mam tę konstrukcję w moim kodzie, jednak domyślam się, że domyślnie gfortran nadal umieszcza tablice na stercie, a teraz mam malloc w środku moich ciasnych pętli. Wydaje się, że potrzebna jest opcja "-fstack-arrays". – DaveP