Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 05/02/2011, à 21:54

Laserpithium

[Résolu] C++ : pointeur et gestion de la RAM par le noyau

Bonjour tout le monde,

Ma question concerne d'avantage la gestion de la RAM par Linux que le C++ en particulier.

Imaginons que je possède un tableau "monTableau", et que je récupère un pointeur sur le premier élément de ce tableau.
Je peux donc l'utiliser pour accèder aux divers éléments de mon tableau via *(monPointeur + int), avec int un entier qui va bien.
Mais question: est-ce que Linux peut me déplacer mon tableau dans la RAM sans me prévenir, ou bien une fois la variable déclarée, sa place en mémoire reste t'elle inchangée jusqu'à sa suppression?
En effet, si pour une raison x ou y (réduire la fragmentation de la RAM ou autre) le noyau balade la variable dans la RAM, une adresse sur cette variable pouvant être valide à un instant t risque de ne plus être bonne plus tard.

Donc question: puis-je jouer avec mon pointeur tant que je veux (par exemple dans des grandes boucles for), ou bien faut-il le réactualiser de temps à autres?

Dernière modification par Laserpithium (Le 05/02/2011, à 23:40)


Portable Toshiba P300-220, proc P8300 Core2Duo 4Go RAM CG ATI HD4650 Mobility
Archlinux 64bits
GE>$ d s++:-- a- C++ L+++ P W++(+++) w--@ PE+ Y+ !R tv-() b+++ e+++ r-->r y>y+

Hors ligne

#2 Le 05/02/2011, à 21:59

grim7reaper

Re : [Résolu] C++ : pointeur et gestion de la RAM par le noyau

Salut,

Laserpithium a écrit :

Mais question: est-ce que Linux peut me déplacer mon tableau dans la RAM sans me prévenir, ou bien une fois la variable déclarée, sa place en mémoire reste t'elle inchangée jusqu'à sa suppression?

Il peut être déplacé (et même en dehors de la RAM, il peut être mis sur le disque en cas de swapping par exemple).

Laserpithium a écrit :

Donc question: puis-je jouer avec mon pointeur tant que je veux (par exemple dans des grandes boucles for), ou bien faut-il le réactualiser de temps à autres?

Aucun problème pour toi, tout cela est géré de manière transparente pour l'utilisateur (donc ton pointeur est valide tant que toi tu ne fais pas bêtises avec smile).

Dernière modification par grim7reaper (Le 05/02/2011, à 21:59)

Hors ligne

#3 Le 05/02/2011, à 22:36

kyncani

Re : [Résolu] C++ : pointeur et gestion de la RAM par le noyau

Tu as l'adresse de ton tableau dans l'espace d'adressage de ton processus. Le lien entre l'espace d'adressage de ton processus et la mémoire physique est géré par linux. http://en.wikipedia.org/wiki/Virtual_memory

Hors ligne

#4 Le 05/02/2011, à 22:40

grim7reaper

Re : [Résolu] C++ : pointeur et gestion de la RAM par le noyau

Hum…
Il me semble que la correspondance est plutôt faite pas la MMU (après, le noyau s'appuie sûrement dessus mais je ne crois pas que ce soit lui qui fasse ça directement).

Hors ligne

#5 Le 05/02/2011, à 23:40

Laserpithium

Re : [Résolu] C++ : pointeur et gestion de la RAM par le noyau

OK, merci pour l'explication.
Je passe en résolu.


Portable Toshiba P300-220, proc P8300 Core2Duo 4Go RAM CG ATI HD4650 Mobility
Archlinux 64bits
GE>$ d s++:-- a- C++ L+++ P W++(+++) w--@ PE+ Y+ !R tv-() b+++ e+++ r-->r y>y+

Hors ligne

#6 Le 06/02/2011, à 03:38

Le Farfadet Spatial

Re : [Résolu] C++ : pointeur et gestion de la RAM par le noyau

Salut à tous !

   L'essentiel ayant été dit, je me contente de donner un élément un peu à côté, mais qui est important :

Laserpithium a écrit :

Imaginons que je possède un tableau "monTableau", et que je récupère un pointeur sur le premier élément de ce tableau.
Je peux donc l'utiliser pour accèder aux divers éléments de mon tableau via *(monPointeur + int), avec int un entier qui va bien.

   Ce que tu décris, c'est la façon de gérer les tableaux en C, ce n'est pas du C++. En C++, les tableaux sont en général créés par le conteneur « std::vector ». De toute façon, en C++ on utilise beaucoup moins de pointeur qu'en C.

   À bientôt.

Le Farfadet Spatial

Hors ligne