Gestion de la mémoire : subroutine et module
Bonjour à tous.
Venant du monde C++ et me mettant depuis peu au Fortran pour un projet, j'aurai besoin de vos éclaircissements sur la gestion de la mémoire.
Concrètement que se passe-t-il quand on passe un tableau en argument d'une subroutine ?
Celui-ci est-il recopié en mémoire, ou la subroutine travaille-t-elle sur le tableau original ?
De même dans le cas où le programme principal et l'une des subroutines utilisent un module dans lequel est déclaré un tableau, combien de fois ce tableau est-il créé en mémoire ?
Merci ;)
passage d'arguments par reference
bonjour
Indubitablement,je n'ai pas vu de compilateur fortran passer des parametres par valeur comme pour un language "low-level" tel que c ou c++.
La regle etablie pour tous les compilateurs est de passer par reference,c.à.d que c'est l'adresse de l'argument qui est passe .
Cela peut etre verifie aisement si on fait appel en c ou c++ à un sous programme fortran,car on doit passer des pointeurs pour les tableaux, et des operateurs adresses pour des variables scalaires.
Les clauses INTENT ne signifient pas qu'on passe par valeur mais bien par reference avec les restrictions suivantes:
INTENT(IN) The procedure must not change the argument.
INTENT(OUT) The argument is undefined on entry and may be given a value in the procedure.
INTENT(INOUT) The argument may be given a value in the procedure.
Aussi n'y a t-il de recopie en memoire.
Idem pour les modules
Et c'est la l'un des avantages de fortran-une seule regle de passage des arguments et aussi l'une des difficultes majeure avec les fameux "effets de bord" des variables.
Le seul moyen de l'eviter est le pool de variables communes dans des modules specialise pour eviter de passer par des arguments puisque l'occupation memoire est identique.
arguments.
bon code....