new qui renvoie un pointeur énorme?

new qui renvoie un pointeur énorme? - C++ - Programmation

Marsh Posté le 14-06-2007 à 03:51:27    

:hello:  
 
c'est possible que new renvoie un pointeur qui pointe dans les 3 000 000 000 (alors que j'ai que 1go de ram?)
 
dans le constructeur de l'objet créé, this est déjà comme ça ( un peu logique en fait.. )
 
le plus bizare c'est que d'autre objets créés après avec new ont une adresse plus "résonable"...
 
valgrind trouve pas de grosses erreurs ( enfin juste des micros erreur de gtk toussa qui sont là à chaque fois )
 
comment c'est possible, pourquoi ca pourrait arriver? aidez moi ça fait des heures que jsuis dessus  :cry:

Reply

Marsh Posté le 14-06-2007 à 03:51:27   

Reply

Marsh Posté le 14-06-2007 à 11:36:28    

tu confonds l'adresse et l'espace alloué.

Reply

Marsh Posté le 14-06-2007 à 13:05:18    

Non, il confond adresse logique et adresse physique. :)
 
En gros: l'OS fait pointer les pointeurs vers où il veut en mémoire virtuelle (et d'ailleurs 2 processus différents peuvent avoir des pointeurs de valeur identique qui pointent vers des zones complètement différentes).  
 
Et derrière, l'unité de gestion de la mémoire qui se trouve dans le processeur se charge de convertir ces adresses logiques en adresses physiques (une vraie adresse en RAM). Quitte à faire du travail intermédiaire pour aller chercher le contenu dans le swap (ou le fichier de pagination) si la zone a été swappée.

Reply

Marsh Posté le 14-06-2007 à 22:32:49    

ha d'accord ^^
(espace alloué de 3go ? )
en même temps ça plantait pas (enfin après). jcomprends pas trop pourquoi ça va aussi loin mais bon.
merci beaucoup

Reply

Marsh Posté le 15-06-2007 à 11:41:54    

Lam's a écrit :

Non, il confond adresse logique et adresse physique. :)
 
En gros: l'OS fait pointer les pointeurs vers où il veut en mémoire virtuelle (et d'ailleurs 2 processus différents peuvent avoir des pointeurs de valeur identique qui pointent vers des zones complètement différentes).  
 
Et derrière, l'unité de gestion de la mémoire qui se trouve dans le processeur se charge de convertir ces adresses logiques en adresses physiques (une vraie adresse en RAM). Quitte à faire du travail intermédiaire pour aller chercher le contenu dans le swap (ou le fichier de pagination) si la zone a été swappée.


tu m'appelles le jour ou tu vois une adresse physique

Reply

Marsh Posté le 15-06-2007 à 14:11:33    

Taz a écrit :

tu m'appelles le jour ou tu vois une adresse physique


Bien sûr. Par adresse physique, j'entends "adresse mise sur le bus" (la position dans la barrette mémoire, on s'en tape un peu).
 
Lorsque ton PC démarre, il est en mode réel. Il peut y rester (sous DOS par exemple), auquel cas l'adressage linéaire correspond à l'adressage physique. Il peut aussi passer à tout moment en mode protégé (ce que font tous les OS modernes). Il faut alors demander spécifiquement à l'OS d'aller chatouiller une adresse linéaire (donc physique) spécifique.  
 
C'est comme ça que fonctionnent les drivers qui utilisent le DMA. C'est comme ça que fonctionne le kernel pour faire son paging (via sa Global Descriptor Table). Et c'est comme ça que les applications graphiques d'il y a 10-15 ans arrivaient à afficher du graphisme sous Windows 95. L'adresse physique de la carte VGA (en mode graphique standard) par exemple, commence à 0xA0000h.

Reply

Marsh Posté le 19-06-2007 à 12:43:53    

Question de securité, l'adresse physique t'es innaccesible. Sinon tu peux appeler du code de n'importe ou, avec n'importe quel droit d'execution, aller modifier des parametre de programmes qui tourne en root pour leur faire faire ce que tu veux, etc . . .
 
L'adressage en 32bits se fait sur 4Go, donc une adresse de ce type est parfaitement possible.

Reply

Marsh Posté le 19-06-2007 à 16:11:56    

Reply

Marsh Posté le 19-06-2007 à 17:37:51    


 
Je t'invite a t'exprimer a lieu de denigrer . . .

Reply

Sujets relatifs:

Leave a Replay

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