3
使用带指针的派生类型数组时,fortran中的内存使用情况
在此示例程序中,我以两种不同的方式做同样的事情(至少我是这样认为的)。我在Linux PC上运行此程序,并通过top监视内存使用情况。使用gfortran,我发现第一种方式(“ 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) = …