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 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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
int main()
{
 int *p;
 while(true) p=new int;
}
Par contre si j'écris
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;
}
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é' ?