Delphi gère automatiquement la mémoire
Les variables atomiques dans Delphi, telles que Integer, Boolean, Record, Enumeration, etc., sont automatiquement allouées par le compilateur pour la mémoire dans la portée et automatiquement libérées lorsqu'elles sont hors de la portée. De plus, les chaînes, les variantes, les tableaux dynamiques et les interfaces. sont également gérés automatiquement par Delphi.
Ces variables sont toutes stockées sur la stack , à l'exception des interfaces. De plus, Variant est créé manuellement par les programmeurs à l'aide de fonctions telles que VarArrayCreate ; les tableaux dynamiques sont également créés manuellement par les programmeurs à l'aide de fonctions telles que SetLength, mais dans les deux cas, les programmeurs n'ont pas besoin de le publier eux-mêmes.
De plus, il existe un autre type de variable qui doit être noté, qui est une variable déclarée à l'aide de Threadvar, et sa portée est un thread. Ceci est principalement utilisé lors de l'écriture de fonctions threadées afin que chaque thread utilise un stockage local de thread.
Mémoire gérée manuellement par les programmeurs
Les pointeurs et les objets nécessitent que les programmeurs demandent et libèrent manuellement de la mémoire.
Les pointeurs incluent PChar, Pointer (pointeur non typé), pointeur d'enregistrement, pointeur de variable (pointant vers une variable atomique), pointeur de fonction (telle qu'une fonction de rappel, divisée en fonctions globales et méthodes d'objet). Utilisez la fonction Nouveau pour demander de la mémoire et utilisez Dispose pour libérer le pointeur. De plus, GetMem, ReallocMem et FreeMem constituent également une série de fonctions permettant de demander et de libérer de la mémoire. Vous pouvez lire et définir les trois fonctions de gestion de la mémoire de Delphi via les fonctions GetMemoryManager et SetMemoryManager.
Les objets incluent des objets de sous-classe hérités de deux arbres d'héritage, TObject et IUnknown. Les objets doivent être construits à l'aide de méthodes de constructeur. Si vous ne spécifiez pas de propriétaire pour un objet créé à l'aide d'une méthode constructeur (généralement Create, mais ce n'est peut-être pas le cas ; le compilateur Delphi ne reconnaît que le mot-clé constructor), vous devez le libérer manuellement. Même si vous spécifiez un propriétaire, vous devez encore vérifier la situation réelle. Il doit être publié à un moment précis. Généralement, la méthode Free est utilisée pour la libération (IUnknown ne nécessite pas de libération manuelle). Une meilleure méthode consiste à utiliser FreeAndNil (dans l'unité Sysutils.pas), qui libère non seulement la mémoire occupée mais libère également le pointeur lui-même.
Ces variables sont stockées dans le tas . Un autre problème qui mérite attention est que les pointeurs dans TList doivent être publiés par le programmeur lui-même.
Note:
1. La fonction de rappel n'appartient pas au domaine technique de la gestion de la mémoire. Pour plus de détails, veuillez vous référer à la section « Pointeur ».
2. Pour plus de détails sur l'objet, veuillez vous référer à la section « Modèle d'objet ».
3. Si un pointeur est utilisé à plusieurs endroits et si l'un des endroits est libéré, une exception se produira s'il est utilisé à d'autres endroits. Il s'agit d'un problème auquel il convient de prêter attention lors de l'utilisation de pointeurs. Pour des informations détaillées sur la mémoire, veuillez vous référer à la section « Pointeur ».
4. Passer des pointeurs présente deux avantages évidents : économiser de la mémoire et améliorer la vitesse. Pour des informations détaillées sur la mémoire, consultez les sections « Pointeurs » et « Conseils de conception ».
5. Comment juger des objets et des pointeurs est un sujet très technique. Il existe quelques articles sur ce sujet sur csdn. Vous pouvez également consulter un article écrit par Aimingoo ([email protected]) intitulé "À propos de" Comment détecter si un pointeur. est l'article "Discussion approfondie de l'objet". Pour des informations détaillées sur la mémoire, consultez les sections « Pointeur » et « Objet ».
Terminé le 2004-1-19 .
Tous droits réservés. N'hésitez pas à corriger tout commentaire inapproprié.