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

Langage Java Discussion :

Question théorique sur le langage


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 36
    Par défaut Question théorique sur le langage
    Bonjour,

    J'ai une question théorique à vous soumettre. C'est juste un petit doute autour du langage en lui-même...

    Je me demande où faut-il le mieux placer la déclaration d'une variable...

    Voici la solution la plus sure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Object a = null;
    while (untest) {
       a = fonctionRenvoyantUnObjet(...);
       //Divers traitements ensuite
    }
    Voilà la solution la plus concise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while (untest) {
       Object a = fonctionRenvoyantUnObjet(...);
       //Divers traitements ensuite
    }
    Je pense que pour la seconde solution, à l'exécution, le programme ne réserve pas à chaque itération l'espace mémoire pour la variable a.
    A mon avis, lors de la compilation, la déclaration de la variable a est placée juste avant l'entrée dans la boucle.

    Donc pour moi, la seconde possibilité est à préférer pour sa concision (surtout si on utilise plusieurs variables dans une boucle...

    Qu'en pensez-vous ?

    Je sais c'est débile mais bon...

    Nico

  2. #2
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    ma réponse va peut être sembler naïve, mais bon je me lance ... comme ça ça me permettra d'avoir des éclaircissements ...

    et bien je dirais que pour la seconde version, une nouvelle référence est créée à chaque fois.

    pour la première solution, la référence (enfin l'adresse en mémoire) est la même, il n'y a pas de réallocation de mémoire.

    donc moi, même s'il y a une ligne de plus, je préfère la première solution. Ya moins d'interaction système. En même temps, comme il s'agit d'un Objet, c'est peut être un cas particulier, genre pointeur sur une autre adresse mémoire.

    [EDIT] en fait j'ai mal lu ton post. Désolé je suis un peu à côté de la plaque pour ma réponse.

  3. #3
    BiM
    BiM est déconnecté
    Expert confirmé
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Par défaut
    J'ai pas le même point de vue. La première utilisation, tu crées la variable et elle est utilisable pendant tout le temps d'exécution avant, pendant et après la boucle, réservation de mémoire inutile.

    La seconde solution te permet de libérer la mémoire dès le tour de boucle finit à chaque fois. Si ton application a besoin de cet espace mémoire, il reviendra pour le prendre. Par contre, je pense que si une autre application tourne à côté, cette mémoire ne lui sera pas libérée (à vérifier).

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 36
    Par défaut
    Ce n'est pas un problème, c'est vraiment juste une question que je me pose (je passe des après midi passionantes

    Quand on parle d'espace mémoire, on est bien d'accord qu'on parle juste d'un espace mémoire pour une adresse (pointant sur l'objet retourné par la pseudo fonction), pas l'espace mémoire nécessaire pour stocker une instance de l'objet.

  5. #5
    BiM
    BiM est déconnecté
    Expert confirmé
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Par défaut
    Nous sommes d'accord.

  6. #6
    Membre éprouvé Avatar de White Rabbit
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 122
    Par défaut
    Ce n'est pas un problème de (ré)allocation de mémoire. Mais de portée de variable.

    Dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Object a = null;
    while (untest) {
       a = fonctionRenvoyantUnObjet(...); //Divers traitements ensuite
    }
    La variable a est accessible à l'exterieur et à l'interieur du bloc while délimité par les {}.

    Dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    while (untest) {
       Object a = fonctionRenvoyantUnObjet(...); //Divers traitements ensuite
    }
    La variable a n'est accessible qu'à l'interieur du bloc while délimité par les {}.

Discussions similaires

  1. Réponses: 18
    Dernier message: 02/06/2008, 22h20
  2. Réponses: 3
    Dernier message: 04/04/2008, 18h02
  3. question théorique sur le stockage des données
    Par jp_rennes dans le forum Administration
    Réponses: 1
    Dernier message: 18/09/2006, 18h28
  4. question théorique sur le mot class
    Par stgi02 dans le forum C++
    Réponses: 3
    Dernier message: 01/05/2006, 15h11
  5. Question théorique sur les normales
    Par Pedro dans le forum DirectX
    Réponses: 5
    Dernier message: 16/10/2005, 19h24

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