gfortran para dummies: ¿Qué hace exactamente mcmodel = medium?

Tengo un código que me está dando errores de reubicación al compilar, a continuación hay un ejemplo que ilustra el problema:

  program main
  common/baz/a,b,c
  real a,b,c
  b = 0.0
  call foo()
  print*, b
  end

  subroutine foo()
  common/baz/a,b,c
  real a,b,c

  integer, parameter :: nx = 450
  integer, parameter :: ny = 144
  integer, parameter :: nz = 144
  integer, parameter :: nf = 23*3
  real :: bar(nf,nx*ny*nz)

  !real, allocatable,dimension(:,:) :: bar
  !allocate(bar(nf,nx*ny*nz))

  bar = 1.0
  b = bar(12,32*138*42)

  return
  end

Compilando esto congfortran -O3 -g -o test test.f, Obtuve el siguiente error:

relocation truncated to fit: R_X86_64_PC32 against symbol `baz_' defined in COMMON section in /tmp/ccIkj6tt.o

Pero funciona si usogfortran -O3 -mcmodel=medium -g -o test test.f. También tenga en cuenta que funciona si hago la matriz asignable y la asigno dentro de la subrutina.

Mi pregunta es qué hace exactamente.-mcmodel=medium ¿hacer? Tenía la impresión de que las dos versiones del código (la que tieneallocatable Las matrices y la que no tiene) eran más o menos equivalentes ...

Respuestas a la pregunta(2)

Su respuesta a la pregunta