Fortran intent(inout)是否将值的副本或指针/引用传递给RAM地址?

Jas*_*Lee 4 fortran argument-passing subroutine

作为标题状态我想知道Fortran intent(inout)是否传递了值的副本,或者指向RAM地址的指针/引用?我需要知道这个的原因是我需要传递一个(相对)大数据矩阵.如果它创建一个会导致我问题的本地副本.谢谢!

Joh*_*ger 6

Fortran没有指定函数和子例程参数如何传递的细节,但它确实要求如果过程修改了一个intent(out)intent(inout)参数,那么在过程返回后调用者将看到这些更改.编译器通常通过引用传递参数来实现此要求,但这不是唯一的可能性 - 复制输入/复制输出是主要选择.

您通常可以依赖编译器来实现它可以确定正确的最快行为,这通常是通过引用传递的.但是,有些情况下无法工作,例如将非连续数组部分传递给假定大小的伪参数,并且有时存在复制/复制更快的情况(可能在某些大型多处理器系统上)分段存储器架构).

最重要的是,虽然你提出了一个很好的问题,但没有一般的答案.通常情况下,最好先让它工作,然后在需要时加快速度.将阵列复制问题保留在脑后,但在您有能力进行测试之前不要过于担心.