multidimensional-array - 在Fortran 90中使用2d数组与派生类型的数组

标签 multidimensional-array fortran fortran90 derived-types

假设您需要一个数组列表,每个数组具有相同的大小。使用2D数组在性能上是否更好:

integer, allocatable :: data(:,:)

或派生类型的数组:
type test
    integer, allocatable :: content(:)
end type
type(test), allocatable :: data(:)

当然,对于不同大小的数组,我们别无选择。但是在两种情况下如何管理内存?另外,其中之一是良好的代码习惯吗?

最佳答案

通常,您想使用适合您的问题的最简单的数据结构。如果2D矩形阵列满足您的需要-并且对于大量科学计算问题,Fortran是一个很好的选择,那么它确实可以-那么,这就是您想要的选择。

2d数组在内存中将是连续的,由于缓存和较少的间接级别,通常这将使访问速度更快。 2d数组还允许您执行data = data * 2data = 0.之类的操作,而Arrayt-of-array方法不做[编辑添加:尽管IanH在注释中指出,您可以创建定义的类型和对这些类型的定义的操作,允许这个]。这些优点足够强大,即使您有“参差不齐的数组”,如果预期的行长范围不是那么大,有时也应考虑将其实现为矩形2d数组。

关于multidimensional-array - 在Fortran 90中使用2d数组与派生类型的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18187312/

相关文章:

fortran90 - 语言 : how can double precision variable read and hold string content from an input file

c++ - 多维数组中的 Operator[] 重载 C++

java - java中的二维数组列表

python - 处理 2D 列表 python 的周围

c++ - 在 C++ 中调整二维 vector 的大小并填充 0

floating-point - 如何将复数的虚部设置为零?

linux - 写入 fifo(命名管道)

vim 无法使用 fortran90 代码识别超过 72 的列

fortran - 用户定义通信器的 MPI 减少

fortran - Fortran 中 write(*,*) 和 write(6,*) 的区别