fortran77: массивы указателей или массивы структур? - PullRequest
1 голос
/ 07 марта 2012

Я пытаюсь оптимизировать код в fortran77, и я хотел бы знать, являются ли массивы, объявленные следующим образом внутри процедуры или заголовочного файла, массивами указателей или массивами структур:

случай 1: реальный * 8 xred (maxatm)

вариант 2: общий / атомы / х (макс.)

Я уже искал в интернете, но не смог найти никакой информации по этому поводу, единственное, что я обнаружил, это то, что когда вы передаете массив в подпрограмму, он передается по ссылке. Но относительно того, когда он объявлен в заголовочном файле или внутри подпрограммы, я ничего не нашел.

Заранее спасибо!

1 Ответ

2 голосов
/ 07 марта 2012

В файле .f77 'header' / common / .CMN вы объявляете свои переменные для использования в вашей программе.Пространство, требуемое для этих переменных, устанавливается во время компиляции для каждого файла, который содержит объявление заголовка.Так что для 'My.CMN', который содержит

REAL*8 XEDG(-2:MAXNB+4)  ! left x-edges of cells    
REAL*8 YEDG(-2:MAXNB+4)  ! left y-edges of cells 
REAL*8 XC(-2:MAXNB+4) ! X CELL CENTERS
REAL*8 YC(-2:MAXNB+4) ! Y CELL CENTERS

Эти переменные создаются каждый раз, когда они объявляются в файле .f77 через INCLUDE 'My.CMN'.

Однако, используя общий блок

COMMON /GRID/ XEDG,YEDG,XC,YC

сообщает компилятору, что переменные, содержащиеся в данном файле .CMN (или что-то еще), в некоторой степени являются глобальными / общими, здесь компилятор будет использовать указатели на свободное пространство в памяти.1011 *

См. здесь для получения дополнительной информации о COMMON и здесь для Справочного руководства по компилятору Sun FORTRAN 77 4.0.

...