C'est de la "mémoire" interne au processeur, bien plus rapide que la ram. (t'as dis résumé... je résume xD)
Mais lis plutôt un cours d'architecture système et de système d'exploitation .. (le Tanenbaum reste mon préféré :p).
C'est de la "mémoire" interne au processeur, bien plus rapide que la ram. (t'as dis résumé... je résume xD)
Mais lis plutôt un cours d'architecture système et de système d'exploitation .. (le Tanenbaum reste mon préféré :p).
deubelte,
Tu te perds dans des détails qui n'apporteront rien à ta compréhension des adresses, des pointeurs et de la gestion mémoire. D'autant que des notions comme tas ou pile n'existent pas en C++ mais sont liées au fonctionnement des PC et de certaines plateformes. D'autres ont des stratégies de gestion mémoire différentes. Ce que tu arriveras à comprendre sera donc dépendant de la plateforme sur laquelle tu interviens et du compilateur que tu utilises. L'important est plus de comprendre comment est spécifiée la durée de vie d'une variable, comment intervient la gestion dynamique, qu'est-ce qu'un pointeur, pourquoi on s'en sert (puis comment), quels sont les risques liés et comment on y remédie, etc.
Bonjour,
j'ai une question concernant toujours les références. SI on considère cette classe:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 class set_int{ public: int *adval; int nmax; int nelem; public: set_int(int=20); set_int (set_int const & ); set_int operator =(set_int &); ~set_int(); }; set_int set_int::operator=(set_int &e){ { if(this !=&e) { delete adval; this->adval=new int[nmax=e.nmax]; this->nelem=e.nelem; int i; for(i=0;i<nelem;i++) this->adval[i]=e.adval[i]; } return *this; } }
Quelle sera la différence la même classe, mais si la surcharge de l'opérateur = renvoie une référence:
Par exemple, avec un essais de cette classe:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 set_int & set_int::operator=(set_int &e){ { if(this !=&e) { delete adval; this->adval=new int[nmax=e.nmax]; this->nelem=e.nelem; int i; for(i=0;i<nelem;i++) this->adval[i]=e.adval[i]; } return *this; } }
Je ne vois pas la différence.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 void main(){ set_int ens1,ens2,ens3; int i,n; for(i=0;i<20;i++){ ens1.ajoute(5); ens3.ajoute(6); } for(i=0;i<20;i++){ ens2.ajoute(i); } ens1=ens2=ens3; }
Il est d'ailleurs écrit dans le bouquin que je lis: "A priori seule la valeur du pointeur du premier opérande à besoin d'être transmise par référence, pour que= puisse le modifier: cette condition est obligatoirement remplie puisque notre opérateur est surdéfini comme fonction membre. Toutefois en pratique, on utilisera également la transmission par référence, à la fois pour le second opérande et pour la valeur de retour, de facon à etre plus efficace en temps"
Ce qui fait qu'on aurait pu écrire:
Etant donné que seul this à besoin d'être passé par référence.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 set_int set_int::operator=(set_int e){ {....}
Merci
Disons que c'est surtout important pour d'autres opérateurs surchargés, notamment les opérateurs de décalages de bits surchargés en "insertion/extraction de flux" : L'opérateur surchargé prend en paramètre une référence vers le flux, et retourne cette même référence.
PS: J'ai appris un truc, aujourd'hui: que type & uneRef = *unPointeur; compte comme un déréférencement de unPointeur.
Ce qui donne la propriété: Dans un programme sans comportement indéfini, il ne peut y avoir de référence nulle.
Pardon, compte logiquement, vu de la norme, comme un déréférencement du pointeur.
Je ne crois pas que la norme oblige l'implémentation à physiquement déréférencer le pointeur. C'est juste qu'elle ne définit pas ce qui se passe si on essaie...
En mêmte temps c'est un peu ce qu'on essaye de dire avec loic depuis deux pages :s...
En effet, mais j'ai eu du mal à en voir la conclusion.
Le fait important est surtout que la norme n'interdit pas à l'implémentation de déréférencer physiquement le pointeur.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager