Module 5 : La gestion de la mémoire Flashcards

1
Q

trois grandes zones de mémoire

A

Zone de la pile d’appel
Zone d’adressage statique
Zone d’allocation dynamique sur le monceau

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Zone de la pile d’appel

A

permet de stocker des variables temporaires dont la durée de vie correspond à la durée de la fonction à laquelle ces variables sont associées.
ovariable locale :
apparaît au moment d’un appel de fonction
disparaît lorsque cette même fonction se termine.
La pile empile et dépile continuellement des données.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Zone d’adressage statique

A

permet de définir
o des variables globales,
o des variables définies hors des fonctions
o des variables déclarées comme statique.

La visibilité de ces variables dépend de leur déclaration
leur durée de vie coïncide avec le démarrage de
l’exécutable et l’arrêt de celui-ci.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q
  • Zone d’allocation dynamique
A

Les deux premières zones ont leur utilité
odemeurent insuffisantes pour la plupart des programmes sérieux.
dans un programme, on ne peut
oestimer la quantité de mémoire nécessaire
oprévoir à quel moment celle-ci sera nécessaire.
oréserver une très grande partie de la mémoire
simplement parce qu’on prévoit en avoir besoin.

utiliser l’allocation dynamique pour obtenir et libérer de la mémoire lorsqu’on en a vraiment besoin.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

pour allouer de la mémoire dynamiquement,
opérateur

A

new :
X* p = new X(arguments du constructeur);

oOn doit absolument récupérer l’espace alloué par le new
sinon on laisse ce qu’on appelle des déchets (memory leaks).
opérateur delete :
oOn récupère l’espace occupé par un objet sur le monceau
oAppel de l’opérateur delete sur le pointeur obtenu à partir d’un
new :
delete p;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

zone d’allocation dynamique

A

zone que le système d’exploitation nous réserve.
zone toujours libérée à la fin de l’exécution du programme.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Fuite de mémoire
1 new  1 delete
Qui a la responsabilité de libérer?

A

Solution : les pointeurs intelligents

unique_ptr
shared_ptr
weak_ptr

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

unique_ptr

A

Un seul emplacement mémoire référencé par un seul
pointeur

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

shared_ptr

A

Un même emplacement référencé par plusieurs pointeurs
oCompteur de référence (Lorsque le dernier shared_ptr est
détruit, l’objet pointe est également détruit.)
oPas de notion de propriété

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Principe de clone

A

/**
* \fn Entraineur ::clone () const
* \brief Méthode qui permet de faire une copie alloué sur le monceau de l’objet courant.
* \return L’adresse du clone de l’objet courant dans un pointeur. */

std::unique_ptr<Personne>
Entraineur::clone () const
{
return make_unique <Entraineur> (*this); // return new Ouvrage (*this);
}</Entraineur></Personne>

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

deux sortes de copie

A
  1. La copie de surface (ou shallow copy)
  2. La copie en profondeur (ou deep copy)

Une copie de surface (shallow copy) veut dire que la liste1 et la liste2 partagent leurs données

(deep copy)
liste2 et liste1 : parfaitement indépendantes les unes des autres.
o La modification sur la liste1 n’affectera en rien le comportement de la liste2

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Si on ne fait rien de particulier

A

le langage C++ fait toujours une copie de surface lors de la copie d’un objet.
Si on désire une copie en profondeur
il faut l’implanter.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Constructeur copie

A

oAppelé si passage en paramètre par valeur
oAppelé si retour par valeur
o automatiquement généré par le langage C++
fait une copie de surface par défaut

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Opérateur de copie/assignation

A

=
o automatiquement généré par le langage C++
fait une copie de surface par défaut

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Pour toute classe qui contient des allocations dynamique de la mémoire,
implanter les 3 méthodes

A

Destructeur (vider): avec les pointeurs intelligents on a plus besoin de destructeurs.
constructeur de copie (remplir)
surcharge de operator = (vider puis remplir)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Il est possible d’empêcher la copie d’un objet simplement en rendant

A

inaccessibles les méthodes qui font la copie,
o le constructeur copie (passage et retour par valeur)
o l’assignation (assignation d’un objet à un autre objet du même type).

déclarer les méthodes constructeur copie et opérateur d’assignation dans la section privée de la classe.
On peut utiliser: = delete

17
Q

Lorsque par mégarde une copie de l’objet sera tentée

A

ole compilateur va simplement dire que le constructeur copie ou l’opérateur d’assignation n’est pas accessible.
opeut se produire
si un objet est passé par valeur
si un objet est retourné par valeur.

18
Q
A