我负责许多遗留 (F77) 程序。有时,其中一个或另一个可能会由于尝试超过固定数组大小而失败。我通常的解决方法是过度分配有问题的数组。
有没有人有关于将这些固定数组更改为动态数组的想法或经验,以及对代码的其余部分(包括子例程调用)有何影响?
我在 OpenVMS 上使用相当新的编译器,因此我相信不会出现编译器问题。
您能更清楚地了解一下您目前在做什么以及打算做什么吗?您声明您“过度分配”数组,这表明您已经在使用动态数组,然后在下一句中您询问有关将固定数组更改为动态数组的问题。
也许您的意思是您在编译时定义的数组的空间比您预期使用的空间多?这是 Fortran 程序员长期以来的工作方式之一。然而,从 Fortran 90 开始,该语言以标准方式支持动态数组,即那些大小在运行时确定的数组。关键字 ALLOCATABLE 用于声明此类数组,并使用 ALLOCATE 过程为它们分配空间(通常在堆上)。当然,此后数组大小是固定的。要动态扩展数组,通常必须分配一个更大的数组,然后复制元素。
如果您希望继续使用旧程序,那么我建议转换为可分配数组的努力将得到回报。自从 Fortran 90 编译器广泛使用以来,我(我怀疑大多数其他 Fortran 程序员)已经做了很多这样的事情。回报努力的方式之一是让您专注于维护的其他方面。考虑到现代计算机上内存的可用性,与上一代编写代码的人相比,您无需担心使用这些空间。我预计代码的用户也正在尝试解决比他们的祖先更大的问题。分配数组将提供某种面向未来的措施。
至于对代码其他部分的影响,请考虑一下:
我预计有很多事情我已经忘记了。