小编geo*_*fas的帖子

Fortran:普通数组与存储相同数据量的对象所需的RAM

尝试使用动态内存分配以两种不同的方式存储一些数据,我注意到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)

arrays oop ram fortran

7
推荐指数
1
解决办法
186
查看次数

标签 统计

arrays ×1

fortran ×1

oop ×1

ram ×1