假设您需要一个数组列表,每个数组具有相同的大小。使用2D数组在性能上是否更好:
integer, allocatable :: data(:,:)
或派生类型的数组:
type test
integer, allocatable :: content(:)
end type
type(test), allocatable :: data(:)
当然,对于不同大小的数组,我们别无选择。但是在两种情况下如何管理内存?另外,其中之一是良好的代码习惯吗?
最佳答案
通常,您想使用适合您的问题的最简单的数据结构。如果2D矩形阵列满足您的需要-并且对于大量科学计算问题,Fortran是一个很好的选择,那么它确实可以-那么,这就是您想要的选择。
2d数组在内存中将是连续的,由于缓存和较少的间接级别,通常这将使访问速度更快。 2d数组还允许您执行data = data * 2
或data = 0.
之类的操作,而Arrayt-of-array方法不做[编辑添加:尽管IanH在注释中指出,您可以创建定义的类型和对这些类型的定义的操作,允许这个]。这些优点足够强大,即使您有“参差不齐的数组”,如果预期的行长范围不是那么大,有时也应考虑将其实现为矩形2d数组。
关于multidimensional-array - 在Fortran 90中使用2d数组与派生类型的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18187312/