এই নমুনা প্রোগ্রামে আমি একই জিনিসটি করছি (কমপক্ষে আমি এটি মনে করি) দুটি ভিন্ন উপায়ে। আমি এটি আমার লিনাক্স পিসিতে চালাচ্ছি এবং শীর্ষের সাথে মেমরির ব্যবহার নিরীক্ষণ করছি। গফর্ট্রান ব্যবহার করে আমি দেখতে পেলাম যে প্রথম উপায়ে ("1" এবং "2" এর মধ্যে) ব্যবহৃত মেমরিটি 8.2 গিগাবাইট, অন্যদিকে ("2" এবং "3" এর মধ্যে) মেমরির ব্যবহার 3.0 গিগাবাইট। ইন্টেল সংকলকটির সাথে পার্থক্যটি আরও বড়: 10 জিবি বনাম 3 জিবি। এটি পয়েন্টার ব্যবহারের জন্য অত্যধিক জরিমানা বলে মনে হচ্ছে। কেন এমন হয়?
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 হয় তবে স্থানীয় পরিশোধনগুলির উপর নির্ভর করে আরও বেশি হয়ে উঠতে পারে।