【问题标题】:Why do we need allocatable array in Fortran?为什么我们需要 Fortran 中的可分配数组?
【发布时间】:2016-08-05 08:50:36
【问题描述】:

我是 Fortran 新手。我的问题是为什么我们需要 Fortran 中的可分配数组?我知道一个好处是你不需要事先知道尺寸。但是还有性能原因吗?

比如数组用完以后就不会再使用了,我们就释放数组。与不使用可分配数组(即常规数组)相比,这种解除分配是否有助于释放更多内存?

【问题讨论】:

  • 是什么让您认为它们在 Fortran 中是需要的?大多数语言功能是为了方便,而不是必需。
  • @JohnColeman 当我写下“需要”这个词时,我实际上并没有想太多。我的主要问题实际上是解除分配实际上是否有助于释放内存空间,以便将来的数据可以存储在这些位置。
  • 我只是在迂腐。自从我在 Fortran 中做过任何事情以来已经有好几年了,所以我不能说这个,但是如果我对 C 的经验是任何指导(通常将数组分配到存在的地方),那么能够确定的灵活性运行时动态大小是主要动机,而不是完成后释放内存的能力。后者主要作为一种支持技术很重要,因为它可以在不造成内存泄漏的情况下实现前者。
  • @JohnColeman :在我看来,他的问题很有意义,尽管这可能不是提出这个基本问题的好平台。恐怕精英社区不想多次了解初学者的问题,而这种“需要”的大惊小怪就是一个很好的例子。

标签: memory-management fortran


【解决方案1】:

可分配数组有两个用途:

  1. 您不必在编译时知道数组的大小。
  2. 您可以最大限度地减少内存使用。

如果没有可分配数组,您将不得不选择一个足够大的静态数组大小以适应任何可能的大小,这意味着在大多数情况下,您将使用比必要更多的内存。而如果误判了可能的大小,则需要更改代码并重新编译。

静态数组也会在它们在作用域内的整个持续时间内消耗它们的内存,因此对于主程序中的数组来说,这将是整个运行时间。如果您不再需要可分配数组,则可以(并且应该)释放它们以最小化内存使用。

(在可分配数组之前,您可以使用EQUIVALENCE 语句使不同的变量和数组使用相同的物理内存,前提是您知道您永远不会同时需要它们。)

【讨论】:

    【解决方案2】:

    我知道我不应该,但是……

    ...我们不需要任何可分配数组,我们在 FORTRAN 35 年没有他们......只需将 64K 的 RAM 放入一个 静态数组,我们将自己进行内存管理,非常感谢 很多...

    [穿着紧身衣被带走,嘴里吐着白沫。]

    【讨论】:

      猜你喜欢
      • 2010-10-23
      • 1970-01-01
      • 2015-12-18
      • 1970-01-01
      • 1970-01-01
      • 2019-06-09
      • 2014-06-30
      • 2016-03-07
      • 1970-01-01
      相关资源
      最近更新 更多