Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3684 connectés 

 


Dernière réponse
Sujet : [C++] un pt'it truc m'intrigue:
BENB 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....

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
BENB 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....
brunomailly

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.

zop 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 ...
Ace17 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
H4dd3R 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!!
brunomailly 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 !
Giz c zarb ton pb !! moi j'hallucinerai devt un truc comme ca , je ne comprendrai plus rien au c  :lol:
BENB 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.
aurel 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 ?

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)