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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part new quelquechose
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 monl'OS est informé qu il peut redisposer comme il l entend de cet espace mémoire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part delete pquelquechose
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
Par contre si j'écris
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 int main() { int *p; while(true) p=new int; }
Ce dernier programme se terminant, il doit bien en informer l'OS.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 int main() { int* p; for(int i=0 ; i<10; ++i) p=new int; }
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é' ?
Partager