un pt'it truc m'intrigue: [C++] - Programmation
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.
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
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 !
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!!
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
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 ...
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.
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....
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 ?