Memory management 为什么我们需要Fortran中的可分配数组?

Memory management 为什么我们需要Fortran中的可分配数组?,memory-management,fortran,Memory Management,Fortran,我不熟悉Fortran。我的问题是为什么我们需要Fortran中的可分配数组?我知道一个好处是你不需要事先知道尺寸。但是否也存在性能方面的原因 例如,在使用该阵列之后,如果将来不再重用该阵列,我们将取消分配该阵列。与不使用可分配数组(即常规数组)相比,此释放是否有助于释放更多内存?可分配数组有两个用途: 您不必在编译时知道数组的大小 您可以最大限度地减少内存使用 如果没有可分配的数组,您必须选择一个足够大的静态数组大小,以适应任何可能的大小,这意味着在大多数情况下,您将使用远远超过需要的内存。如

我不熟悉Fortran。我的问题是为什么我们需要Fortran中的可分配数组?我知道一个好处是你不需要事先知道尺寸。但是否也存在性能方面的原因


例如,在使用该阵列之后,如果将来不再重用该阵列,我们将取消分配该阵列。与不使用可分配数组(即常规数组)相比,此释放是否有助于释放更多内存?

可分配数组有两个用途:

  • 您不必在编译时知道数组的大小
  • 您可以最大限度地减少内存使用
  • 如果没有可分配的数组,您必须选择一个足够大的静态数组大小,以适应任何可能的大小,这意味着在大多数情况下,您将使用远远超过需要的内存。如果您误判了可能的大小,则需要更改代码并重新编译

    静态数组也会在其作用域内的整个持续时间内消耗内存,因此对于主程序中的数组,这将是整个运行时间。如果您不再需要可分配阵列,可以(而且应该)取消分配它们,以最大限度地减少内存使用


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

    我知道我不应该,但

    。。。我们不需要糟糕的可分配数组,我们在 FORTRAN在没有它们的情况下运行了35年。。。把那64K的内存放进一个 静态数组,我们自己做内存管理,非常感谢 很多


    [穿着紧身夹克,嘴里咆哮着,口吐白沫。]

    你凭什么认为Fortran需要它们?大多数语言功能都是为了方便,而不是为了必要。@JohnColeman我在写下“需要”这个词的时候其实没有考虑太多。我的主要问题实际上是,释放确实有助于释放内存空间,以便将来的数据可以存储在这些位置。我只是学究。我已经多年没有用Fortran做过任何事情了,所以我不能这么说,但是如果我用C语言的经验可以作为指导(通常是将数组malloc化为存在),那么能够在运行时动态确定大小的灵活性是主要的动机,而不是在完成时释放内存的能力。后者在很大程度上是一种使能技术,因为它可以在不造成内存泄漏的情况下实现前者。@johncleman:在我看来,他的问题很有意义,尽管这可能不是提出这个基本问题的好平台。我担心精英社区不想多次了解初学者的问题,这种关于“需要”的大惊小怪就是一个很好的例子。