Description
I was going to ask this in #113 but didn't want to derail that thread.
This is more of a personal question... since I've actually done very little with returning an allocatable array from a function. I may have flawed logic, so please correct me if i'm wrong.
I've had compile issues in the past returning allocatable from functions (cant remember all the details but perhaps others have had these too) and I "intuitively" thought there might be a slow down if those functions need calling multiple times.
Ill use the snippet from #113
function mean(mat, dim) result(res)
real(sp), intent(in) :: mat(:,:)
integer, intent(in), optional :: dim !dim = 1 or dim = 2
real(sp), allocatable :: res(:)
end function
If I have a large array, and I call this multiple times, does it reallocate memory for that variable every time? Or is there some cleverness that happens?
e.g. 1D result is already allocated, function allocates its own result, on return those results are copied to pre-allocated array.
real(sp), allocatable :: x(:), A(:, :)
! A = full of numbers
allocate(x(shape(A)(2)))
x(:) = mean(A, dim=1)
Is it known what happens specifically, memory wise? Is it compiler dependent?
I'm asking because it will be slower if allocations keep happening, we might want to be careful and always make subroutines available where preallocated memory can be accessed without any implicit allocations and then copies. Am I worrying about this too much haha.