gfortran for dummies: What does mcmodel=medium do exactly?

后端 未结 2 1305
生来不讨喜
生来不讨喜 2020-11-28 08:16

I have some code that is giving me relocation errors when compiling, below is an example which illustrates the problem:

  program main
  common/baz/a,b,c
  r         


        
2条回答
  •  抹茶落季
    2020-11-28 08:41

    No, large static arrays (as your bar) may exceed the limit if you do not use -mcmodel=medium. But allocatables are better of course. For allocatables only the array descriptor must fit into 2 GB, not the whole array.

    From GCC reference:

    -mcmodel=small
    Generate code for the small code model: the program and its symbols must be linked in the lower 2 GB of the address space. Pointers are 64 bits. Programs can be statically or dynamically linked. This is the default code model. 
    -mcmodel=kernel
    Generate code for the kernel code model. The kernel runs in the negative 2 GB of the address space. This model has to be used for Linux kernel code. 
    -mcmodel=medium
    Generate code for the medium model: The program is linked in the lower 2 GB of the address space but symbols can be located anywhere in the address space. Programs can be statically or dynamically linked, but building of shared libraries are not supported with the medium model. 
    -mcmodel=large
    Generate code for the large model: This model makes no assumptions about addresses and sizes of sections. Currently GCC does not implement this model.
    

提交回复
热议问题