本帖最后由 btx97 于 2014-2-20 15:53 编辑
因为听说高手都是指针用的比较多的,所以最近在考虑fortran里指针的作用。特意发帖希望高手们能来一起讨论下,让我们学习中的新人长点知识。:lol:lol
在fortran 95/2003 for scientists and engineerings 书中指出,在数组交换的过程中,用指针交换的效率明显比用普通变量交换的效率要高。 所以自己写代码比较了一下效率,代码为
[Fortran] 纯文本查看 复制代码 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] 纯文本查看 复制代码 $ ./a.out
Time of variable exchange: 4.5159998
Time of pointer exchange: 8.00037384E-03
可以发现用指针的确比用普通变量有效。
不过我还有个疑问希望高手能解答下。 fortran中指针所占内存的是不是比它的Target要少很多? 因为如果fortran中指针所占内存跟它的Target一样,那么虽然代码效率是提高了,但所耗资源也提高了不少,就不见得很经济。
此外,指针在链表里的应用很多书上都讲了。我觉得我们可以先不考虑指针在结构数据的应用。
十分希望各位高手能把自己使用指针的经验体会拿出来分享下, 共同讨论下fortran中指针的优缺点。
|