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

Java Discussion :

désallocation dynamique .


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut désallocation dynamique .
    bonjour

    Dans le code ci dessous, je ne comprends pas la fonction "viderPile". Celle-ci sert à vider la pile entièrement. Mais ce que fait la fonction, c'est mettre sommet à -1.
    Il semble donc que le vidage de la pile se fasse automatiquement.
    sommet est l'indice qui permet de repérer des éléments dans un tableau, si on le met à une valeur en dessous de zéro, cela signifie t il que toutes les valeurs sont supprimées?
    Ce que je ne comprends pas non plus, c'est comment le compilateur comprends qu'en fixant sommet à -1, on vide toute la pile?
    je vous remercie



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    public class Pile{
        private int sommet;
        private int[] element;
     
        private void erreur (String mes){
               System.out.println("***erreur"+mes);
        }
     
        public Pile(int max){
          sommet=-1;
          element=new int[max];
    }
     
    public boolean pileVide(){
        return sommet=-1;
    }
     
    public void empiler(int v){
        if(sommet<element.length-1){
           sommet++;
           element[sommet]=v;
        }
      else {
       erreur("pile saturée");
    }
     
    public void depiler(){
       int v=0;
       if(!pileVide()){
          v=element[sommet];
           sommet--;
       }
        else{
         erreur("Pile vide");
    }return v;
    }
     
     
    public void viderPile(){
    sommet=-1;
    } 
     
    }

  2. #2
    Membre émérite Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Par défaut
    Bonjour,
    ici il s'agit d'un vidage fonctionnel: en mettant le sommet à -1, tu renseignes l'utilisateur qu'il n'y a plus aucun élément dans la pile.
    Il n'y a aucun vidage effectué par le compilateur, tes variables sont toujours présentes dans la pile, seulement tu ne les récupérera pas avec la fonction empiler ou depiler, qui dépendent de la variable "sommet".

    Le compilateur ne fera rien de particulier après cette fonction, et tu pourrais toujours accéder aux variables du tableau en appelant directement element[x], mais dans le cadre de l'utilisation de la pile tu ne peux accéder qu'à l'élément "sommet"

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Il n'y a pas de libération de mémoire dans ton exemple, car tu utilises un tableau dont la taille ne varie pas.
    Ta propriété sommet est simplement un indice te permettant d'accéder au dernier élément de ta "pile".
    Ceci dit, quand tu dépiles, les éléments qui se trouvent dans ton tableau ne sont pas supprimés et tu peux toujours y accéder.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Par défaut
    Dans ce genre de situation, la mémoire reste occupée par les éléments de la pile qui ne sont pas libéré. Ici ce n'est pas gênant car il y a peu d'éléments à priori et qu'ils prennent peu de place (un entier).

    Dans le cas d'une immense pile ça pourrait poser problème, il faudrait alors utiliser un dimensionnement dynamique de la pile pour libérer la mémoire lors du vidage ou du dépilement.

    Pour une pile d'objets, on pourrait aussi dépiler tous les éléments en mettant la référence de chaque élément à null pour que le GC ait une chance de faire le ménage, mais la solution du redimensionnement serait là encore plus rapide.

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

Discussions similaires

  1. désallocation mémoire - fonction - structure - tableau dynamique
    Par Flaherty Mc Coillean dans le forum Débuter
    Réponses: 2
    Dernier message: 25/11/2009, 17h42
  2. comment creer un alias dynamique avec BDE et ODBC
    Par david33 dans le forum C++Builder
    Réponses: 2
    Dernier message: 12/07/2002, 11h50
  3. Création dynamique de TImages
    Par Dric dans le forum C++Builder
    Réponses: 10
    Dernier message: 08/07/2002, 12h36
  4. Réponses: 4
    Dernier message: 13/05/2002, 16h43
  5. repertoire temp dynamique
    Par killpilot dans le forum C
    Réponses: 2
    Dernier message: 26/04/2002, 16h19

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