我正在为高性能计算编写代码。我发现使用 result 关键字来命名函数的返回值很方便。我想知道这里是否有任何性能问题?特别是,编译器会为指示的结果名称制作一个临时变量'最终要复制到与函数名称关联的变量中,或者是'结果名称'只是一个别名?
我使用' gfortran -S'编译了以下两个代码:
program test_result
real*8 :: a, b, c
a = 10.0
b = 20.0
c = myfunc(a, b)
contains
function myfunc(x, y)
real*8 :: myfunc
real*8 :: x, y
myfunc = x * y
end function myfunc
end program test_result
program test_result
real*8 :: a, b, c
a = 10.0
b = 20.0
c = myfunc(a, b)
contains
function myfunc(x, y) result(f)
real*8 :: f
real*8 :: x, y
f = x * y
end function myfunc
end program test_result
没有优化,编译器给了我两个不同的汇编输出,虽然生成的装配线看起来相同但优化。有人知道这里的含义吗?
谢谢!
答案 0 :(得分:3)
没有任何性能损失,这只是一个语法问题,生成的代码是相同的。它实际上只是一个“别名”。
即使禁用了优化,也不会有任何差异。我的测试证实了这一点。如果您不是这种情况,则应该显示您从编译器中获得的差异。