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

C++ Discussion :

Logique de l'adressage des variables ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 77
    Par défaut Logique de l'adressage des variables ?
    Bonjour, je suis en train de préparer un petit exercice sur les pointeurs, et en faisant des tests sous visual c++, je viens de me rendre compte que je ne comprends pas comment le compilateur répartit les variables dans la mémoire de l'ordinateur.

    En effet, voici une partie de mon programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    float a=0.001;
    float b=0.003;
    float c, *pa, *pb;
     
    cout << "Adresses : " << endl;
    cout << "&a = " << &a << endl;
    cout << "&b = " << &b << endl;
    cout << "&c = " << &c << endl;
    cout << "&pa = " << &pa << endl;
    cout << "&pb = " << &pb << endl;
    Le résultat me surprend :

    &a = 0012FF64
    &b = 0012FF68
    &c = 0012FF6C
    &pa = 0012FF5C
    &pb = 0012FF60

    D'une part, je ne comprend pas pourquoi dans la mémoire pa et pb sont placés avant a, b et c, alors qu'ils ont été déclarés après si on suit les instructions du programme.

    Par ailleurs, j'ai essayé d'échanger les déclarations de a et b, en mettant float b avant float a, et à ma grande surprise l'affichage est le même : l'adresse de b est celle de a + 4 octets...

    L'adresse des variables est-il determiné en fonction de leurs noms ? Au sujet de l'échange a - b, suis victime d'une sorte de cache de Visual Studio (qui ne reconsidère pas la déclaration des variables d'une compilation à une autre... ?)

    Enfin, est-ce le même fonctionnement en C ?

    Merci de bien vouloir m'éclairer mes chers amis.

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Le compilateur fait comme bon lui semble, et ceci en C comme en C++.

  3. #3
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par jomeo
    Bonjour, je suis en train de préparer un petit exercice sur les pointeurs, et en faisant des tests sous visual c++, je viens de me rendre compte que je ne comprends pas comment le compilateur répartit les variables dans la mémoire de l'ordinateur.
    Il fait ce qu'il veut, tu n'as pas a t'en occuper. Il peut meme ne jamais mettre une variable en memoire s'il le juge bon (ce qu'il ne va pas faire si tu prends l'adresse).

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 77
    Par défaut
    Mais dans ce cas, pourquoi ai-je subi tous ces exercices sur les pointeurs du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int a= 1, b= 2;
    int *pa = &a, *pb = &b:
    Sachant que &a = 1130

    donnez :
    &b, pa, pb, ...

    Vous voulez dire que b, pa, pb ne seront pas forcément après a dans la mémoire ?

    Merci de vos infos

  5. #5
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par jomeo
    Mais dans ce cas, pourquoi ai-je subi tous ces exercices sur les pointeurs du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int a= 1, b= 2;
    int *pa = &a, *pb = &b:
    Sachant que &a = 1130

    donnez :
    &b, pa, pb, ...

    Vous voulez dire que b, pa, pb ne seront pas forcément après a dans la mémoire ?
    Gagne. pa et pb peuvent meme n'exister que dans des registres si on n'en prend jamais l'adresse.

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Si tu veux que ce soit à la suite, utilise une structure.

  7. #7
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 77
    Par défaut
    Merci de vos précisions.... Bon bah j'oublie les questions sur la position des variables dans la mémoire pour mes exercices :-)

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

Discussions similaires

  1. [C#] Récupération des variables system...
    Par smyley dans le forum Windows Forms
    Réponses: 7
    Dernier message: 04/08/2005, 11h39
  2. Réponses: 4
    Dernier message: 15/12/2002, 04h19
  3. Gestion des variables - mémoire ?
    Par RIVOLLET dans le forum Langage
    Réponses: 4
    Dernier message: 26/10/2002, 12h44
  4. [VB6] [Fichier] Enregistrer des variables de structure
    Par de.bo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/10/2002, 11h09
  5. Réponses: 4
    Dernier message: 18/07/2002, 13h32

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