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