IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Fortran Discussion :

Allocation dynamique dans une subroutine


Sujet :

Fortran

  1. #1
    Membre habitué
    Homme Profil pro
    Doctorant en Astrophysique
    Inscrit en
    Mars 2009
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Astrophysique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2009
    Messages : 312
    Points : 176
    Points
    176
    Par défaut Allocation dynamique dans une subroutine
    Bonjour.

    Venant à l'origine du monde du C++, je sais dans ce langage ce que fait le compilateur quand je décide de travailler par référence ou par valeur dans une fonction.

    Mais ici, Fortran me pose quelques soucis : dans une subroutine sensée travailler sur des tableaux dynamiques passés en argument que se passe-t-il concrètement en mémoire : le programme travaille-t-il avec les tableaux originaux ou des copies ?

    Imaginons que je veuille faire une routine d'allocation de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    subroutine allocate_tableaux(tableau_1,tableau_2,n)
    integer,dimension(:),allocatable,intent(inout)::tableau_1
    integer,dimension(:),allocatable,intent(inout)::tableau_2
    allocate(tableau_1(1:n))
    allocate(tableau_2(1:n))
    end subroutine allocate_tableaux
    Est-ce que cette portion de code fait ce que je veux faire (allouer les tableaux passés en argument en travaillant par référence), ou sinon quelle est la syntaxe correcte ? Est-ce que ce type de choses fait parti du "standard Fortran" et est donc compatible avec gfortran et ifort ?

    Merci beaucoup.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Points : 1 346
    Points
    1 346
    Par défaut
    Citation Envoyé par Kaluza Voir le message
    Mais ici, Fortran me pose quelques soucis : dans une subroutine sensée travailler sur des tableaux dynamiques passés en argument que se passe-t-il concrètement en mémoire : le programme travaille-t-il avec les tableaux originaux ou des copies ?
    Même si la norme ne le dit pas explicitement, les compilateurs passent toujours les variables par référence (sauf rares exceptions).

    Si le compilateur voit une interface spécifiant un argument allocatable, ou pointeur ou dimentionné variable par (:), le compilateur passe un header (struct) du tableau par référence. Sinon, il passe l'adresse du premier élément comme en C disons (compatibilité Fortran 77). Le header contient le rang, le size de chaque dimension, l'adresse du vecteur, etc.
    Citation Envoyé par Kaluza Voir le message
    Imaginons que je veuille faire une routine d'allocation de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    subroutine allocate_tableaux(tableau_1,tableau_2,n)
    integer,dimension(:),allocatable,intent(inout)::tableau_1
    integer,dimension(:),allocatable,intent(inout)::tableau_2
    allocate(tableau_1(1:n))
    allocate(tableau_2(1:n))
    end subroutine allocate_tableaux
    Est-ce que cette portion de code fait ce que je veux faire (allouer les tableaux passés en argument en travaillant par référence), ou sinon quelle est la syntaxe correcte ?
    Ce code me semble correct. Le compilateur va mettre à jour le header obtenu par référence.
    Citation Envoyé par Kaluza Voir le message
    Est-ce que ce type de choses fait parti du "standard Fortran" et est donc compatible avec gfortran et ifort ?
    Oui.

Discussions similaires

  1. Allocation dynamique dans une fonction
    Par Kaluza dans le forum Langage
    Réponses: 8
    Dernier message: 26/04/2011, 10h23
  2. Réponses: 2
    Dernier message: 24/04/2011, 16h24
  3. allocation dynamique dans une structure !
    Par grodashe dans le forum C
    Réponses: 2
    Dernier message: 31/12/2009, 11h17
  4. Allocation dynamique dans une fonction
    Par n0mad dans le forum Débuter
    Réponses: 5
    Dernier message: 05/02/2009, 22h42
  5. [D7] - Allocation dynamique dans une DLL
    Par david_chardonnet dans le forum Delphi
    Réponses: 6
    Dernier message: 05/07/2006, 15h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo