| 本帖最后由 btx97 于 2014-2-20 15:53 编辑 
 因为听说高手都是指针用的比较多的,所以最近在考虑fortran里指针的作用。特意发帖希望高手们能来一起讨论下,让我们学习中的新人长点知识。:lol:lol
 在fortran 95/2003 for scientists and engineerings 书中指出,在数组交换的过程中,用指针交换的效率明显比用普通变量交换的效率要高。 所以自己写代码比较了一下效率,代码为
 
 [Fortran] syntaxhighlighter_viewsource syntaxhighlighter_copycode program test_pointer
  implicit none
  real, dimension(100,100), target :: array1, array2
  real, dimension(:,:), pointer :: p1, p2, temp_p
  real, dimension(100,100) :: a1, a2, temp
  integer :: i
  real :: begin, end
  call random_number(a1)
  call random_number(a2)
  array1=a1
  array2=a2
  p1=>array1
  p2=>array2
  call cpu_time(begin) 
  do i=1,1000000
     temp=a1
     a1=a2
     a2=temp
  end do
  call cpu_time(end)
     
  write(*,*) 'Time of variable exchange:', end-begin
  call cpu_time(begin)
  do i=1,1000000
     temp_p=>p1
     p1=>p2
     p2=>temp_p
  end do
  call cpu_time(end)
  write(*,*) 'Time of pointer exchange:', end-begin
end program test_pointer运行结果为:
 
 
 [Shell] syntaxhighlighter_viewsource syntaxhighlighter_copycode $ ./a.out 
 Time of variable exchange:   4.5159998    
 Time of pointer exchange:  8.00037384E-03
 
 
 可以发现用指针的确比用普通变量有效。
 不过我还有个疑问希望高手能解答下。 fortran中指针所占内存的是不是比它的Target要少很多?  因为如果fortran中指针所占内存跟它的Target一样,那么虽然代码效率是提高了,但所耗资源也提高了不少,就不见得很经济。
 
 此外,指针在链表里的应用很多书上都讲了。我觉得我们可以先不考虑指针在结构数据的应用。
 
 十分希望各位高手能把自己使用指针的经验体会拿出来分享下, 共同讨论下fortran中指针的优缺点。
 
 
 
 
 |