Allocation dynamique de mémoire.
Bonjour,
Je me demande ce qui se passe réellement lors de l allocation dynamique de mémoire et sa libération...
J imagine que lors de l utilisation d un , l'OS est mis a contribution.
Le programme que l on écrit doit bien a un moment donné demander poliment a l os si ma machine dispose de la place nécessaire pour stocker quelquechose.
Et quand j'ecris mon
Code:
delete pquelquechose
l'OS est informé qu il peut redisposer comme il l entend de cet espace mémoire.
Je comprends donc assez bien pourquoi il faut libérer la mémoire lorsqu on ecrit un programme qui tourne indéfiniment comme celui-ci
Code:
1 2 3 4 5 6
|
int main()
{
int *p;
while(true) p=new int;
} |
Par contre si j'écris
Code:
1 2 3 4 5 6 7
|
int main()
{
int* p;
for(int i=0 ; i<10; ++i)
p=new int;
} |
Ce dernier programme se terminant, il doit bien en informer l'OS.
Est ce qu'alors l'OS récupère la mémoire non libérée par ce dernier programme ou est-elle définitivement hors d'atteinte ?
En d'autres termes.... en faisant tourner en boucle quelques milliards de fois mon dernier programme est ce que je vais épuiser la mémoire de ma machine ?
Ou encore en d'autres termes, si j'écris un programme dont je sais qu'il va s arreter et utiliser une quantité "raisonnable" de mémoire lors de son fonctionnement est ce que je peux oublier des delete en toute 'sécurité' ?