Maison  >  Article  >  Quelle est la différence entre une fuite de mémoire et un débordement de mémoire ?

Quelle est la différence entre une fuite de mémoire et un débordement de mémoire ?

青灯夜游
青灯夜游original
2020-12-03 17:22:0840140parcourir

Différence : un dépassement de mémoire signifie que lorsque le programme demande de la mémoire, il n'y a pas assez d'espace mémoire pour qu'il puisse l'utiliser, et le système ne peut plus allouer l'espace dont vous avez besoin, ce qui signifie qu'après l'application du programme ; pour la mémoire, il ne peut pas libérer l'espace mémoire appliqué. Les dommages causés par une fuite de mémoire peuvent être ignorés, mais si le nombre de fuites de mémoire est trop important, cela entraînera un débordement de mémoire.

Quelle est la différence entre une fuite de mémoire et un débordement de mémoire ?

L'environnement d'exploitation de cet article : système Windows 7, ordinateur Dell G3.

Débordement de mémoire (mémoire insuffisante) signifie que lorsque le programme demande de la mémoire, il n'y a pas assez d'espace mémoire pour qu'il puisse l'utiliser, et un manque de mémoire se produit, par exemple, un nombre entier ; est demandé, mais il stocke le numéro qui ne peut être stocké que pendant longtemps, ce qui est un débordement de mémoire.

Fuite de mémoire (fuite de mémoire) signifie qu'une fois que le programme a demandé de la mémoire, il ne peut pas libérer l'espace mémoire appliqué. Les dommages d'une fuite de mémoire peuvent être ignorés, mais les conséquences de l'accumulation. Les fuites de mémoire sont graves. Quelle que soit la quantité de mémoire dont vous disposez, elle sera occupée tôt ou tard.

Une fuite de mémoire finira par entraîner un manque de mémoire !

Un débordement de mémoire signifie que la mémoire que vous demandez à allouer dépasse ce que le système peut vous donner, et que le système ne peut pas répondre à la demande, donc un débordement se produit.

Une fuite de mémoire signifie que vous demandez au système d'allouer de la mémoire à utiliser (nouvelle), mais que vous ne la restituez pas (supprimez) après l'avoir utilisée. Par conséquent, vous perdez également. la mémoire demandée n'est plus accessible (vous avez peut-être perdu son adresse) et le système ne peut plus l'attribuer au programme requis. Une assiette ne peut contenir que 4 fruits. Vous y avez mis 5 fruits, mais ils sont tombés au sol et n'ont pas pu être mangés. C'est du débordement ! Par exemple, si une pile est repoussée alors qu'elle est pleine, un débordement d'espace se produira, appelé débordement. Si une pile est repoussée alors qu'elle est vide, un débordement d'espace se produira, appelé débordement inférieur. Autrement dit, la mémoire allouée n'est pas suffisante pour enregistrer la séquence d'éléments de données, ce que l'on appelle un débordement de mémoire

Classés selon la manière dont ils se produisent, les fuites de mémoire peuvent être divisées en 4 catégories :

1. Le code présentant des fuites de mémoire sera exécuté plusieurs fois, provoquant une fuite de mémoire à chaque exécution.

2. Fuites de mémoire occasionnelles. Le code provoquant des fuites de mémoire ne se produira que dans certaines circonstances ou opérations. Les cas fréquents et sporadiques sont relatifs. Dans certaines circonstances, ce qui est occasionnel peut devenir courant. L’environnement de test et les méthodes de test sont donc cruciaux pour détecter les fuites de mémoire.

3. Fuite de mémoire unique. Le code qui provoque une fuite de mémoire ne sera exécuté qu'une seule fois, ou en raison de défauts algorithmiques, il n'y aura toujours qu'un seul et un seul bloc de mémoire divulgué. Par exemple, si de la mémoire est allouée dans le constructeur d’une classe, mais que la mémoire n’est pas libérée dans le destructeur, la fuite de mémoire ne se produira qu’une seule fois.

4. Fuite de mémoire implicite. Le programme alloue continuellement de la mémoire pendant son exécution, mais ne libère la mémoire qu'à la fin. À proprement parler, il n’y a pas de fuite de mémoire ici, car le programme finit par libérer toute la mémoire demandée. Mais pour un programme serveur qui doit fonctionner pendant des jours, des semaines, voire des mois, le fait de ne pas libérer de mémoire à temps peut également conduire à l'épuisement éventuel de toute la mémoire du système. Par conséquent, nous appelons ce type de fuite de mémoire une fuite de mémoire implicite.

Du point de vue des utilisateurs utilisant le programme, les fuites de mémoire elles-mêmes ne causeront aucun dommage. En tant qu'utilisateurs ordinaires, ils ne ressentiront pas du tout l'existence de fuites de mémoire. Ce qui est vraiment néfaste, c'est l'accumulation de fuites de mémoire, qui finiront par consommer toute la mémoire du système. De ce point de vue, les fuites de mémoire ponctuelles ne sont pas nuisibles car elles ne s'accumulent pas, tandis que les fuites de mémoire implicites sont très néfastes car elles sont plus difficiles à détecter que les fuites de mémoire récurrentes et sporadiques

Tutoriels vidéo gratuits recommandés : "

Vidéo de programmation"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn