इस नमूना कार्यक्रम में मैं एक ही काम कर रहा हूं (कम से कम मुझे ऐसा लगता है) दो अलग-अलग तरीकों से। मैं इसे अपने लिनक्स पीसी पर चला रहा हूं और शीर्ष के साथ मेमोरी उपयोग की निगरानी कर रहा हूं। गैफरान का उपयोग करते हुए मुझे पता चला कि पहले तरीके ("1" और "2" के बीच) में इस्तेमाल की गई मेमोरी 8.2GB है, जबकि दूसरे तरीके ("2" और "3" के बीच) में मेमोरी का उपयोग 3.0GB है। इंटेल कंपाइलर के साथ अंतर और भी बड़ा है: 10GB बनाम 3GB। यह संकेत का उपयोग करने के लिए एक अत्यधिक दंड लगता है। ऐसा क्यों होता है?
program test
implicit none
type nodesType
integer:: nnodes
integer,dimension(:),pointer:: nodes
end type nodesType
type nodesType2
integer:: nnodes
integer,dimension(4):: nodes
end type nodesType2
type(nodesType),dimension(:),allocatable:: FaceList
type(nodesType2),dimension(:),allocatable:: FaceList2
integer:: n,i
n = 100000000
print *, '1'
read(*,*)
allocate(FaceList(n))
do i=1,n
FaceList(i)%nnodes = 4
allocate(FaceList(i)%nodes(4))
FaceList(i)%nodes(1:4) = (/1,2,3,4/)
end do
print *, '2'
read(*,*)
do i=1,n
deallocate(FaceList(i)%nodes)
end do
deallocate(FaceList)
allocate(FaceList2(n))
do i=1,n
FaceList2(i)%nnodes = 4
FaceList2(i)%nodes(1:4) = (/1,2,3,4/)
end do
print *, '3'
read(*,*)
end program test
पृष्ठभूमि स्थानीय ग्रिड शोधन है। मैंने चेहरों को आसानी से जोड़ने और हटाने के लिए लिंक की गई सूची को चुना। नोड्स की संख्या डिफ़ॉल्ट रूप से 4 है, लेकिन स्थानीय शोधन के आधार पर अधिक हो सकती है।