尝试使用动态内存分配以两种不同的方式存储一些数据,我注意到RAM要求的巨大差异,我无法解释.一些见解将不胜感激.
在以下示例中,目标是创建一个数据库,该数据库在多边形网格中存储连接到节点的边的ID.但是,问题的性质是无关紧要的.
案例1,使用"普通"数组:
program memorytest
implicit none
integer, dimension(:, :), allocatable :: node_edges
integer :: i
allocate(node_edges(10, 10000000)) ! 10000000 nodes with 10 edges each
node_edges(:, :) = 0
read *, i ! pause
deallocate(node_edges)
end program memorytest
Run Code Online (Sandbox Code Playgroud)
RAM需要:~395,500 K.
案例2,使用节点类型:
program memorytest
implicit none
type node
integer, dimension(:), allocatable :: edges
end type
type(node), dimension(:), allocatable :: nodes
integer :: i
allocate(nodes(10000000)) ! 10000000 nodes
do i = 1, 10000000
allocate(nodes(i)%edges(10)) ! with 10 edges each
end do
do …Run Code Online (Sandbox Code Playgroud)