Est-ce que Delphi a Garbage Collection
?Garbage Collection dans Delphi
Répondre
Réponse simple Non
Delphi est pas un langage de collecte des ordures complète, types définis par l'utilisateur doivent être attribués manuellement et désallouées. Il fournit seulement la collection automatique, pour quelques types intégrés, tels que les chaînes, les tableaux dynamiques et les interfaces pour la facilité d'utilisation.
Mais vous pouvez utiliser des interfaces qui utilisent le comptage de référence pour la récupération de place dans une certaine mesure.
Dans le sens habituel du garbage collection, où le moteur d'exécution détecte les objets non référencés et les détruit ou récupère autrement les ressources inutilisées, non, Delphi n'a pas de garbage collection. Si vous utilisez Delphi Win32 natif, la collecte la plus proche de la corbeille est les différents types comptés par référence, y compris les chaînes, les interfaces, les variantes et les tableaux dynamiques. Ces types seront nettoyés automatiquement lorsque votre programme détermine qu'ils ne sont plus utilisés, mais il le fait en gardant un compte de référence lorsque ces objets entrent et quittent la portée actuelle. Vous avez également le concept de propriété , qui détruira les composants possédés lorsque le propriétaire est détruit.
Si vous utilisez Delphi pour .Net, vous avez implicitement la garbage collection de l'environnement d'exécution sous-jacent.
Delphi.NET est mort depuis plus de 2 ans –
Oui, @User, et depuis Delphi 7 a dix ans, il doit être mort aussi. En outre, le langage Delphi continue d'être disponible pour .Net via Prism. –
Prism ne tente même pas de source partagée, donc je ne vois pas cela comme une continuation. Sauf pour la marque. –
Oui, c'est le cas.
Delphi Win32 ne comprend pas un éboueur hors de la boîte alors les autres réponses à cette question sont techniquement correctes. Cependant, cela n'implique pas que ce n'est pas possible ou qu'il n'existe pas déjà. Merci au gestionnaire de mémoire remplaçable de Delphi Barry Kelly mis en œuvre un code wrapper entièrement fonctionnel pour le Boehm garbage collector en 2004.
Il comprend exemple la démonstration de son utilisation (essentiellement la création d'objets non affectés et en regardant le GC les mâcher). Il y a des GC plus avancés que le GC de Boehm mais cela démontre clairement son possible et il peut être utilisé de manière presque transparente. Vous ajoutez simplement l'unité gc au début de la clause uses de votre projet.
Et même si je n'ai entendu parler d'aucun projet qui tente de le faire, rien n'empêche quelqu'un d'envelopper ou de porter un gc plus avancé.
Delphi Prism
a Garbage Collection car il est basé sur .NET
standard Delphi (Win32 natif)
N'a pas Garbage Collection
Delphi Win32/64 n'a pas de garbage collector. Vous pouvez toutefois tirer parti du mécanisme de comptage des références natives Delphi pour que les instances soient libérées automatiquement à l'aide d'interfaces. La différence entre un garbage collector et un mécanisme de comptage de référence est que vous devrez traiter des références circulaires, c'est-à-dire que si les instances A et B se réfèrent mutuellement, vous devez interrompre manuellement le cycle pour libérer A ou B .
Il convient également de mentionner que tout ce qui dérive de TComponent prend un pointeur propriétaire via le constructeur, ce qui provoque la destruction de l'objet avec son propriétaire. –
Delphi garbage recueille certains types de données, tels que tableau dynamique, chaîne. –
Delphi est familier avec ARC (Automatic Reference Counting), un moyen de gérer la durée de vie des interfaces (implémentation de RefCount) et d'autres types. De nos jours, le tout dernier compilateur mobile Delphi a présenté ARC aux objets. Il est contrôlé par une directive de compilation "{$ AUTOREFCOUNT}". Voir le lien ci-dessous: http://docwiki.embarcadero.com/RADStudio/Tokyo/fr/Automatic_Reference_Counting_in_Delphi_Mobile_Compilers – Lucas