Динамическое распределение памяти в fortran77 - PullRequest
1 голос
/ 01 октября 2010

Я пишу программу на Fortran77, которая использует трехмерный массив.Я объявляю массив следующим образом Array_E (0: 500,0: 1000,0: 100).Когда я запускаю программу, она мгновенно падает, говоря, что она «убита».Когда я запустил strace, я получил

execve ("./ yee", ["./yee"], [/ * 65 vars * /] +++, убитый SIGKILL +++

Я подозреваю, что проблема в том, что компилятор g77 не может выделить память для массива. На самом деле таких массивов девять. В таком случае есть ли способ динамически выделить память в стеке в f77?Если это не причина сбоя, пожалуйста, дайте мне знать, если у вас есть какие-либо идеи по этому поводу.

1 Ответ

3 голосов
/ 07 ноября 2010

Размер массива составляет около 50х10 ^ 6 записей, поэтому размер примерно 400 МБ для двойной точности.9 таких массивов занимают 3,6 ГБ памяти, поэтому я предполагаю, что у вас достаточно памяти для начала?

Использование больших массивов в Fortran 77 может быть проблематичным, поскольку они не выделяются динамически, а помещаются настек.Я не уверен, каковы ограничения, я думаю, это зависит от операционной системы и архитектуры, но в 32-битной системе, вероятно, не будет работать с массивами, которые так велики в стеке.Вы можете прибегнуть к выделяемым массивам Fortran 90, но тогда вам нужно использовать gfortran вместо g77.

Если вам нужно придерживаться строгого fortran 77, вы можете использовать пакет ma, который можно получить как частьинструментарий глобальных массивов (http://www.emsl.pnl.gov/docs/global/).

...