Partage de la mémoire

De RAD Studio
Aller à : navigation, rechercher

Remonter à Gestion de la mémoire - Index


Cette section décrit comment partager la mémoire avec le gestionnaire de mémoire.

Sur Win32 et Win64, si une DLL exporte des routines qui transmettent des chaînes longues ou des tableaux dynamiques comme paramètres ou comme résultats de fonctions, que ce soit directement ou à l'intérieur d'enregistrements ou d'objets, la DLL et ses applications client (ou DLL) doivent toutes partager le même gestionnaire de mémoire. Cela s'applique également si une application ou une DLL alloue avec System.New ou System.GetMem de la mémoire qui est désallouée par l'appel de System.Dispose ou System.FreeMem dans un autre module. Il existe deux méthodes mutuellement exclusives via lesquelles le gestionnaire de mémoire peut être partagé entre une application et ses bibliothèques : ShareMem et SimpleShareMem.

Sur Posix, l'application et la bibliothèque partagée partagent déjà l'utilisation de la bibliothèque System, notamment malloc, free et realloc.

Remarque : Quand une DLL est statiquement liée à une application, la DLL est initialisée avant l'application. L'application utilisera le gestionnaire de mémoire de la DLL si la méthode de partage SimpleShareMem est utilisée dans les deux. Seul le module qui partage son gestionnaire de mémoire peut modifier les paramètres du gestionnaire de mémoire et récupérer ses statistiques. La modification des paramètres dans les autres modules n'aura aucun effet puisque leurs gestionnaires de mémoire ne sont pas utilisés. Il est possible, mais rarement nécessaire, de contrôler manuellement le mécanisme de partage du gestionnaire de mémoire.

Pour utiliser ShareMem

  1. Listez ShareMem comme la première unité du programme et de la clause uses de la bibliothèque. Vos modules deviendront dépendants de la bibliothèque externe BORLNDMM.DLL, ce qui leur permet de partager dynamiquement la mémoire allouée.
  2. Déployez BORLNDMM.DLL avec votre application ou DLL qui utilise ShareMem. Quand une application ou une DLL utilise ShareMem, son gestionnaire de mémoire est remplacé par celui contenu dans BORLNDMM.DLL.

Pour utiliser SimpleShareMem

  1. Listez SimpleShareMem comme la première unité du programme et clause uses de la bibliothèque dans chacun de vos modules. Le module initialisé en premier sera le module qui partagera son gestionnaire de mémoire. Tous les modules initialisés après utiliseront le gestionnaire de mémoire du premier module.
  2. Le module initialisé en premier sera le module qui partagera son gestionnaire de mémoire. Tous les modules initialisés après utiliseront le gestionnaire de mémoire du premier module.

Voir aussi