为什么Fortran POINTER需要TARGET?

时间:2011-01-18 23:03:34

标签: pointers fortran

为什么Fortran 90 Specification指定(5.2.8)必须使用TARGET关键字将POINTER与之关联?为什么不是每种类型都是有效的目标?

例如,

INTEGER, POINTER :: px
INTEGER, TARGET :: x
x = 5
px => x
有效的语法但是
INTEGER, POINTER :: px
INTEGER :: x
x = 5
px => x
无效

为什么必须这样?

3 个答案:

答案 0 :(得分:17)

可能指向的项可能会别名为另一个项,编译器必须允许这样做。没有目标属性的项目不应该是别名,编译器可以基于此进行假设,从而产生更有效的代码。

答案 1 :(得分:2)

fortran中的指针与c中的指针不同。在fortran中,90个指针提供了很少的限制,比如有一个目标。这样做是为了解决速度问题并保持指针使用安全。尽管一次调用使得可分配的指针不需要指定目标。深入挖掘,你会发现它们!

答案 2 :(得分:0)

为了更好的编译器优化。当您的代码在1K-100K内核上运行时,速度确实很重要。

并不总是使用Btw TARGET。例如,在指针用于分配内存的情况下。

...
real, pointer :: p(:), x
...
allocate(p(15))
...
x => p(1:5)
...
nullify(x)
deallocate(p)
...