Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Pointeur sur objet et adresse physique (purement didactique).

3 réponses
Avatar
Valrik
Bonjour à tous,
Une petite question de débutant sur les pointeurs et les adresses
physiques...
Soit le code suivant :
using namespace std ;

# include <iostream>
class bidon {
} ;

int main(int argc, char **argv) {
bidon bidonnage_1 ;
cout << "&bidonnage_1 : " << &bidonnage_1 << endl ;
bidon *bidonnage_2 = new bidon ;
cout << "bidonnage_2 : " << bidonnage_2 << endl ;
cout << "&bidonnage_2 : " << &bidonnage_2 << endl ;

return 0 ;
}

On a, à l'exécution, le retour suivant :
$ ./essai
&bidonnage_1 : 0xbf8cad2f
bidonnage_2 : 0x81ae008
&bidonnage_2 : 0xbf8cad28
$

Si je comprends bien, on a en ligne :
une, l'adresse physique de l'objet bidonnage_1
deux, l'adresse physique de l'objet bidonnage_2 (le pointé)
trois, l'adresse physique du pointeur de l'objet bidonnage_2.
Est-ce bien cela ?
Merci et bonne journée.

3 réponses

Avatar
Jean-Marc Bourguet
Valrik writes:

Si je comprends bien, on a en ligne :
une, l'adresse physique de l'objet bidonnage_1
deux, l'adresse physique de l'objet bidonnage_2 (le pointé)
trois, l'adresse physique du pointeur de l'objet bidonnage_2.
Est-ce bien cela ?



Presque -- j'utiliserais adresse virtuelle plutot qu'adresse physique: les
processus on generalement des espaces memoires separes (la meme adresse
pour deux processus ne designe pas le meme emplacement memoire) et le
processeur traduit les adresses propres a chaque processus (les adresses
virtuelles) en adresses physiques. Sauf cas particulier, ces dernieres
n'ont de sens (et ne sont visibles) que pour l'OS et le hard.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Avatar
Valrik
Valrik wrote:

Bonjour à tous,
Une petite question de débutant sur les pointeurs et les adresses
physiques...
Soit le code suivant :
using namespace std ;

# include <iostream>
class bidon {
} ;

int main(int argc, char **argv) {
bidon bidonnage_1 ;
cout << "&bidonnage_1 : " << &bidonnage_1 << endl ;
bidon *bidonnage_2 = new bidon ;
cout << "bidonnage_2 : " << bidonnage_2 << endl ;
cout << "&bidonnage_2 : " << &bidonnage_2 << endl ;

return 0 ;
}

On a, à l'exécution, le retour suivant :
$ ./essai
&bidonnage_1 : 0xbf8cad2f
bidonnage_2 : 0x81ae008
&bidonnage_2 : 0xbf8cad28
$

Si je comprends bien, on a en ligne :
une, l'adresse physique de l'objet bidonnage_1
deux, l'adresse physique de l'objet bidonnage_2 (le pointé)
trois, l'adresse physique du pointeur de l'objet bidonnage_2.
Est-ce bien cela ?
Merci et bonne journée.


Je crois que j'ai fait une grosse faute : j'ai oublié de détruire l'objet
bidonnage_2 avec un "delete bidonnage_2 ;" en fin de main().
Avatar
Valrik
Jean-Marc Bourguet wrote:

Valrik writes:

Si je comprends bien, on a en ligne :
une, l'adresse physique de l'objet bidonnage_1
deux, l'adresse physique de l'objet bidonnage_2 (le pointé)
trois, l'adresse physique du pointeur de l'objet bidonnage_2.
Est-ce bien cela ?



Presque -- j'utiliserais adresse virtuelle plutot qu'adresse physique: les
processus on generalement des espaces memoires separes (la meme adresse
pour deux processus ne designe pas le meme emplacement memoire) et le
processeur traduit les adresses propres a chaque processus (les adresses
virtuelles) en adresses physiques. Sauf cas particulier, ces dernieres
n'ont de sens (et ne sont visibles) que pour l'OS et le hard.

A+



Merci pour ta réponse, elle me convient tout à fait.