繁体   English   中英

在Fortran 90中使用2d数组与派生类型数组

[英]Using 2d array vs array of derived type in Fortran 90

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

integer, allocatable :: data(:,:)

或派生类型数组:

type test
    integer, allocatable :: content(:)
end type
type(test), allocatable :: data(:)

当然,对于不同大小的阵列,我们没有选择。 但是如何在两种情况下管理内存? 还有,其中一个很好的代码实践?

选择实现,最大限度地减少您的思维在头脑中的问题代码中的解决方案之间跳跃的概念距离。 这种方法的力量随着年龄的增长而增加,代码的年龄(良好的概念设计是未来发展的坚实基础)和您自己的年龄(理解您的代码所需的努力越少,您在精神上足够理解的时间越长它)。

至于你的问题中关于内存管理方式的非意见决定部分......我天真的期望是,在大多数情况下,大多数编译器会为你的第一个轮廓分配连续的内存,而不是第二。 但是我不太关心这个问题,我认为你也不应该这样做。 因此,我不建议你不应该对引擎盖下的内容感兴趣,而是应该更关心第一段中提到的事项。

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

2d数组在内存中是连续的,这通常会因为缓存和更少的间接级别而更快地访问它; 2d数组还允许你做data = data * 2data = 0.类的事情。数组数组方法没有[编辑添加:虽然IanH在注释中指出你可以创建一个定义的类型并定义了对这些类型的操作以允许这种情况] 这些优点足够大,即使你有“乱七八糟的数组”,如果预期的行长度范围不是那么大,将它实现为矩形二维数组有时也是值得考虑的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM