Я работаю над публичным выпуском, если модель использует Fortran 9x, и я хотел бы разработать код, поддерживающий как статическое, так и динамическое управление памятью.
Я видел только один пример кода, который поддерживает что-то вроде этого. Это реализовано с использованием препроцессоров, которые выглядят примерно так:
Код будет включать в себя некоторый управляющий файл управления памятью со следующим:
#ifdef STATIC
define NMEM_ N
define PTR_ # blank
#else
define NMEM_ :
define PTR_ ,pointer
Пользователь предоставляет следующий файл для настройки статической памяти:
#define N 100 # Example array size
#define STATIC
В основном коде вы объявляете свою переменную так:
real PTR_, dimension(NMEM_) :: x
Установите STATIC во время компиляции, и он станет
real, dimension(100) :: x
Unset STATIC (неявно устанавливает его в динамический), и он становится
real, pointer, dimension(:) :: x
и некоторый более поздний код выделяет память.
Это прекрасно работает, но я предпочитаю избегать использования препроцессоров, если могу, и для меня это все равно что бред. Есть ли более стандартное решение этой проблемы, или это, как это обычно обрабатывается? Есть ли даже большая разница между статическими и динамическими компиляциями в наши дни (учитывая, что я, вероятно, захочу использовать столько памяти, сколько смогу)?