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

Ada Discussion :

Unchecked_Deallocation ou Ada.Finalization


Sujet :

Ada

  1. #1
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 366
    Points : 1 361
    Points
    1 361
    Par défaut Unchecked_Deallocation ou Ada.Finalization
    Bonsoir

    Chers adaïstes, je débute sur ce langage et j'ai une question pour vous sur l'usage de la mémoire. Je prends l'exemple d'une liste chainée. Je code en Ada 2012.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    type LC_Element;
    type LC_Element_PTR is access LC_Element;
    type LC_Element is record
      Value : Natural;
      NextElement : LC_Element_PTR ;
    end record;
    Je lis qu'il n'y a pas, en général, de GC, de sorte que je dois gérer moi même, pour plus de sureté, mes allocations et désallocations. Pour y parvenir, j'ai la procédure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     procedure Free is new Ada.Unchecked_Deallocation(...)
    Quand je désalloue ma liste, je désalloue chaque élément. J'ai deux questions:
    • est ce que la mémoire est récupérée systématiquement? Ou même après un free, je risque d'avoir un mauvais usage de la mémoire? Ai je un risque d'exploser ma mémoire si j'exécute mon programme longtemps?
    • est ce que les adaïstes expérimentés utilisent un free? Ou juste mettent la tête de liste à null? (ce que Barnes met dans un de ses exemples sur son livre Ada 2005) Ou utilisez vous le package Ada.Finalization?


    Merci beaucoup pour votre aide!
    les raisonnables ont duré, les passionné-e-s ont vécu

  2. #2
    Membre averti Avatar de Blackknight
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2009
    Messages : 214
    Points : 383
    Points
    383
    Par défaut
    Je lis qu'il n'y a pas, en général, de GC, de sorte que je dois gérer moi même, pour plus de sureté, mes allocations et désallocations.
    Effectivement, il y a peu de chances que tu utilises un garbage collector en Ada. Perso, je n'en ai jamais vu par défaut
    Alors oui, l'utilisation de Unchecked_Deallocation est plutôt une saine chose.
    est ce que la mémoire est récupérée systématiquement?
    Oui, c'est d'ailleurs expliqué dans l'ARM.

    Ou même après un free, je risque d'avoir un mauvais usage de la mémoire? Ai je un risque d'exploser ma mémoire si j'exécute mon programme longtemps?
    Non, il n'y a aucun risque si tu l'utilises correctement et quand bien même, contrairement au C/C++, Ada ne t'enverra pas bouler si tu désalloues un truc déjà désalloué.

    est ce que les adaïstes expérimentés utilisent un free? Ou juste mettent la tête de liste à null? (ce que Barnes met dans un de ses exemples sur son livre Ada 2005)
    Tout programmeur qui alloue de la mémoire dynamiquement doit désallouer cette mémoire donc oui, on doit utiliser Free si on utilise un new.
    Mettre la tête de liste à null ne suffit pas si tu dois aussi libérer la mémoire prise par les éléments de la liste.
    Il se peut toutefois que tu aies encore besoin de tes objets plus loin dans ton code et que les désallouer ne soit pas une bonne idée mais dans ce cas, c'est dépendant de ton code.
    Pour ce qui est de ce que mister Barnes raconte, c'est le cas dans tous les bouquins Ada que j'ai pu lire car ils partent du principe qu'un garbage collector peut exister.

    Ou utilisez vous le package Ada.Finalization?
    Ce package n'a pas pour vocation de gérer la mémoire allouée dynamiquement mais plutôt des séquences à effectuer lors de la création ou de la destruction d'un objet qu'il soit alloué sur la pile ou sur le tas.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 366
    Points : 1 361
    Points
    1 361
    Par défaut
    Citation Envoyé par Blackknight Voir le message
    ...
    Merci beaucoup pour cette très bonne réponse!!!
    Sujet résolu
    les raisonnables ont duré, les passionné-e-s ont vécu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Débutant en poo et Ada.Finalization.
    Par Invité dans le forum Ada
    Réponses: 3
    Dernier message: 16/11/2010, 13h59
  2. Java EE 5 en version finale
    Par Petrus dans le forum Java EE
    Réponses: 12
    Dernier message: 13/05/2006, 16h01
  3. [Ada] Gnat
    Par kilinette dans le forum Ada
    Réponses: 4
    Dernier message: 04/10/2004, 09h58
  4. [débutant]portabilité de l'exe final
    Par vvidal80 dans le forum MFC
    Réponses: 8
    Dernier message: 07/01/2004, 09h21

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