gfortran:强制静态内存分配

时间:2014-11-24 11:58:01

标签: memory static fortran allocation gfortran

我目前正在更新一些旧的F77固定格式代码并使用gfortan进行编译。

当我使用静态内存分配时,有没有办法获取警告,例如如果我调用子程序并传递一些在运行时未修复的维度值?

或者我是否必须使用旧的f77编译器?

编辑:

以下是一些代码示例:

      program test

        integer A,b
        read(*,*) b

        select case(b)
          case(50)
            A=40
          case(40)
            A = 50
        end select

        call arr(A)
      end

      subroutine arr(A)
        integer A
        double precision E(A,A)

        E(1,1) =10.
        E(42,41)= 41
        write(*,*)  E(42,41), A
      end

1 个答案:

答案 0 :(得分:2)

您正在使用select case,这是Fortran 90.因此,使用Fortran 77编译器不是一种选择。我担心你必须要小心。如果您远离allocatablepointerallocate,则必须确保没有自动数组。您还可以通过-fno-automatic或类似的方法为小型静态数组和其他变量禁用堆栈分配。

关于您的示例,它确实使用自动数组。如果你真的需要远离它们,你必须将边界声明为编译时常量:

  subroutine arr(A)
    integer MAXA
    parameter (MAXA=1000)
    integer A
    double precision E(MAXA,MAXA)

    E(1,1) =10.
    E(42,41)= 41
    write(*,*)  E(42,41), A
  end