[C++] un pt'it truc m'intrigue:

un pt'it truc m'intrigue: [C++] - Programmation

Marsh Posté le 09-10-2001 à 10:47:45    

je débute le C++ et je viens d'écrire un truc qui sert vraiment a rien, mas je voulais tout de meme voir le rst:
 
int main(int argc, char* argv[])
{
 int x, y, z;
 x = 5;
 y = 9;
 z = 565;
 int* p1 = &x;
 int* p2 = &y;
 int* p3 = &z;
 cout << p1 << "\n" <<p2 << "\n" << p3 << "\n";
 return 0;
}
 
rien de bien méchant, a la portée de n'importe qui.
Ce qui m'intrigue, c que les 3 adresse sont TOUJOURS LES MEMES !!! a caqhe execution qquesoit l'état du systeme.
 
ca pas zarbi, ca ?

Reply

Marsh Posté le 09-10-2001 à 10:47:45   

Reply

Marsh Posté le 09-10-2001 à 10:59:37    

Le resultat depend du systeme...
sur beaucoup de systemes les adresses sont virtuelles ou paginees du coup d'une execution su l'autre ces adresses sont les memes puisqu'il n'y a pas de raison pour que la pile soit a un endroit different par rapport au reste du programme.

Reply

Marsh Posté le 09-10-2001 à 12:37:39    

c zarb ton pb !! moi j'hallucinerai devt un truc comme ca , je ne comprendrai plus rien au c  :lol:


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
Reply

Marsh Posté le 09-10-2001 à 15:18:56    

Puisque tu est sous un système avec mémoire virtuelle, chaque programme a l'impression d'avoir toutes les adresses libres.
 
Ton OS va donc tranquilement charger l'éxécutable toujours à la même adresse, et allouer la pile au même endroit.
Il n'a aucune raison de faire différemment, puisque toutes les adresses sont disponibles... c'est plus simple !


---------------
Pourquoi les cartes mères ont-elles des noms à coucher dehors ?
Reply

Marsh Posté le 09-10-2001 à 16:55:47    

Comment ça tte les adresses sont disponibles??
 
À ce moment là pquoi ne pas tt écrire à 0x00000000??  :??:  
 
Non j´y crois pas, les adresses qu´un proc manipule (avec un malloc ou un new ou ...) sont des adresses dans l´espace mémoire virtuel (alias le proc sait pas si elles sont effectivement en mémoire vive ou en pagefile, et l´os peut le changer à tt moment)..
Mais elles sont qd même uniques..
 
Pour moi je pense que le mode debug essaie d´allouer tjrs les mêmes adresses pour aider l´utilisateur en cas de débug, mais si elles sont pas dispo il en prendra d´autres!!


---------------
Athlon64 s754 10*200MHz - R9800Pro - 512MB DDR200MHz - ZX6RR - Q2[SupOp] - Tutorial Video: multilangues, multisstitres
Reply

Marsh Posté le 09-10-2001 à 17:43:50    

brunomaily a raison : toutes les addresses sont disponibles, du point de vue de ton programme. C'est l'os qui se charge de faire la conversion

Reply

Marsh Posté le 10-10-2001 à 19:24:24    

ou alors, les adresses sont données en relatif, par rapport à l'adresse du début de segment de données, adresse définie à la compilation ...


---------------
- "Qui diable es-tu ?"
Reply

Marsh Posté le 11-10-2001 à 13:44:16    

H4dd3R a écrit a écrit :

À ce moment là pquoi ne pas tt écrire à 0x00000000??  :??:



Parceque 0 est par convention une adresse invalide (NULL).
 
Avant la mémoire virtuelle, les programmes demandaient à être chargés à une adresse arbitraire. Quand la MV est venue on a gardé cette adresse.
Quelle importance ? 0 ou 100'000 c'est pareil, puisque c'est virtuel dans les deux cas.
 
A noter que certaines adresses sont quand même réservées à l'OS (au-dessus de 2 ou 3 Go).
 
Essaye ton programme en mode Release, tu auras un résultat similaire !
 

zop a écrit a écrit :

ou alors, les adresses sont données en relatif...


en C++ mode 32 bits il n'y a pas de pointeurs relatifs, ils sont absolus dans l'espace d'adressage.


---------------
Pourquoi les cartes mères ont-elles des noms à coucher dehors ?
Reply

Marsh Posté le 11-10-2001 à 14:30:47    

ET si, en 32 bits (x86) les adresses sont relatives au debut du segment... mais le segment fait 4Go... alors un seul suffit...
de plus les variables en question sont allouees sur la pile donc se sont toujours les memes la pile est toujours au meme endroit dans le segment....

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed