为什么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
无效。
为什么必须这样?
答案 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)
...