Вероятно, ни того, ни другого, хотя, как обычно, с этими вещами, ответ зависит от конкретных обстоятельств.
Предполагая неэлементарную операцию, я бы хотел написать такую функцию (в модуле) как:
function times2(x) result(y)
real, intent(in) :: x(:)
real :: y(size(x))
y = 2*x
end function
Выше есть аргумент фиктивной фигуры с автоматическим результатом функции.Это:
доступно при записи в стандарт Fortran 95;
явно указывает в источнике зависимость размера результата функции отаргументы функции, которые могут (или не могут) помочь читателям вашего кода понять, что происходит (одним из таких читателей является сам компилятор, который может помочь ему в оптимизации);
может (или не может) избегать промежуточных копий значения массива;
может (или не может) требовать места для результата функции или эквивалентного временного в стеке.
Если бы операция была элементарной (то есть той же самой операцией для каждого элемента, как в данном примере), я бы написал элементальную функцию.Источник для такой функции принимает скалярный аргумент и предоставляет неразмещаемый скалярный результат без указателя.
elemental function times2(x) result(y)
real, intent(in) :: x
real :: y
y = 2*x
end function
Обычно я использую результаты функции отложенной формы, когда форма (или некоторый другой атрибут)результат функции не может быть описан простым выражением спецификации.Результаты для распределенной функции:
требует записи по крайней мере в стандарт Fortran 2003;
может потребовать дополнительной пары выделения / освобождения кучи памяти выше, чемстрого необходимо, что может (или не может) влиять на производительность;
может не требовать такого же использования стека, как случай автоматического результата, который может (или не может) избегатьпроблемы переполнения стека во время выполнения.
Детали реализации компилятора (включая параметры компилятора) влияют на сравнение.В частности, различия в том, как компилятор управляет памятью для временных файлов, могут сделать два подхода сходными с точки зрения их требований к выделению стека и кучи.
Избегайте использования фиктивных аргументов массива фигур, если у вас нет особых требований.