Fonctions globales et locales
Les fonctions globales et locales sont prises en charge pour le portage à partir de code 16 bits ou pour la gestion de la compatibilité du code source avec Windows 16 bits. À compter de Windows 32 bits, les fonctions globales et locales sont implémentées en tant que fonctions wrapper qui appellent les fonctions de tas correspondantes à l’aide d’un handle au tas par défaut du processus. Par conséquent, les fonctions globales et locales ont une surcharge supérieure à d’autres fonctions de gestion de la mémoire.
Les fonctions de tas fournissent plus de fonctionnalités et de contrôle que les fonctions globales et locales. Les nouvelles applications doivent utiliser les fonctions de tas, sauf si la documentation indique spécifiquement qu’une fonction globale ou locale doit être utilisée. Par exemple, certaines fonctions Windows allouent de la mémoire qui doit être libérée avec LocalFree, et les fonctions globales sont toujours utilisées avec Dynamic Data Exchange (DDE), les fonctions du Presse-papiers et les objets de données OLE. Pour obtenir la liste complète des fonctions globales et locales, consultez le tableau dans Fonctions de gestion de la mémoire.
La gestion de la mémoire Windows ne fournit pas de tas local et de tas global distincts, car Windows 16 bits le fait. Par conséquent, les familles globales et locales de fonctions sont équivalentes et le choix entre eux est une question de préférence personnelle. Notez que la modification d’un modèle de mémoire segmentée 16 bits vers un modèle de mémoire virtuelle 32 bits a apporté certaines des fonctions globales et locales associées et leurs options inutiles ou sans signification. Par exemple, il n’existe plus de pointeurs proches et éloignés, car les allocations locales et globales retournent des adresses virtuelles 32 bits.
Les objets mémoire alloués par GlobalAlloc et LocalAlloc se trouvent dans des pages privées validées avec un accès en lecture/écriture qui ne peut pas être accessible par d’autres processus. La mémoire allouée à l’aide de GlobalAlloc avec GMEM_DDESHARE n’est pas réellement partagée globalement, car elle se trouve dans Windows 16 bits. Cette valeur n’a aucun effet et n’est disponible que pour la compatibilité. Les applications nécessitant une mémoire partagée à d’autres fins doivent utiliser des objets de mappage de fichiers. Plusieurs processus peuvent mapper une vue du même objet de mappage de fichiers pour fournir une mémoire partagée nommée. Pour plus d’informations, consultez mappage de fichiers .
Les allocations de mémoire sont limitées uniquement par la mémoire physique disponible, y compris le stockage dans le fichier de pagination sur le disque. Lorsque vous allouez de la mémoire fixe, GlobalAlloc et LocalAlloc renvoyer un pointeur que le processus appelant peut immédiatement utiliser pour accéder à la mémoire. Lorsque vous allouez de la mémoire déplaçable, la valeur de retour est un handle. Pour obtenir un pointeur vers un objet mémoire mobile, utilisez les fonctions GlobalLock et LocalLock.
La taille réelle de la mémoire allouée peut être supérieure à la taille demandée. Pour déterminer le nombre réel d’octets alloués, utilisez la fonction GlobalSize ou LocalSize. Si le montant alloué est supérieur au montant demandé, le processus peut utiliser l’intégralité du montant.
Les fonctions GlobalReAlloc et LocalReAlloc changent la taille ou les attributs d’un objet mémoire alloué par GlobalAlloc et LocalAlloc. La taille peut augmenter ou diminuer.
Les fonctions GlobalFree et LocalFree libèrent la mémoire allouée par GlobalAlloc, LocalAlloc, GlobalReAllocou LocalReAlloc. Pour ignorer l’objet mémoire spécifié sans invalider le handle, utilisez la fonctionGlobalDiscardou Fonction de LocalDiscard. Le handle peut être utilisé ultérieurement par GlobalReAlloc ou LocalReAlloc pour allouer un nouveau bloc de mémoire associé au même handle.
Pour renvoyer des informations sur un objet mémoire spécifié, utilisez la fonctionGlobalFlagsou Fonction LocalFlags. Les informations incluent le nombre de verrous de l’objet et indique si l’objet est ignoré ou a déjà été ignoré. Pour retourner un handle à l’objet mémoire associé à un pointeur spécifié, utilisez la fonctionGlobalHandleou LocalHandle.
Rubriques connexes