考虑以下:
program main
integer, parameter :: n=10, m=20
integer ints(n,m)
real floats(m,n)
!... initialize ints
! ...
floats=transpose(ints)
!... do stuff with floats
end
查看 gfortran 的文档,似乎transpose(ints)
会返回一个整数数组,然后将其转换为实数。在此操作中,编译器 (gfortran) 为转置后的数组创建一个临时数组,这看起来像是一种浪费(使用 编译gfortran -O3 -Warray-temporaries -o test test.f90
)。另请注意,如果您将real
数组“浮点数”更改为integer
数组,警告就会消失。
有没有办法在不生成临时数组的情况下做到这一点(对于任意类型)?(我也尝试过floats(:,:)=transpose(ints)
,因为我在某处读到它很重要......)。它与其他编译器的行为方式是否相同?