Compartir a través de


Funciones globales y locales

Las funciones globales y locales se admiten para migrar desde código de 16 bits o para mantener la compatibilidad del código fuente con Windows de 16 bits. A partir de Windows de 32 bits, las funciones globales y locales se implementan como funciones contenedoras que llaman a las funciones de montón de correspondientes mediante un identificador para el montón predeterminado del proceso. Por lo tanto, las funciones globales y locales tienen una sobrecarga mayor que otras funciones de administración de memoria.

Las funciones de montón proporcionan más características y control que las funciones globales y locales. Las nuevas aplicaciones deben usar las funciones del montón a menos que la documentación indique específicamente que se debe usar una función global o local. Por ejemplo, algunas funciones de Windows asignan memoria que se debe liberar con LocalFree, y las funciones globales se siguen usando con El intercambio dinámico de datos (DDE), las funciones del Portapapeles y los objetos de datos OLE. Para obtener una lista completa de las funciones globales y locales, consulte la tabla de Funciones de administración de memoria.

La administración de memoria de Windows no proporciona un montón local independiente y un montón global, ya que Windows de 16 bits sí. Como resultado, las familias globales y locales de funciones son equivalentes y elegir entre ellas es una cuestión de preferencia personal. Tenga en cuenta que el cambio de un modelo de memoria segmentada de 16 bits a un modelo de memoria virtual de 32 bits ha hecho que algunas de las funciones globales y locales relacionadas y sus opciones sean innecesarias o sin sentido. Por ejemplo, ya no hay punteros cercanos y lejanos, ya que las asignaciones locales y globales devuelven direcciones virtuales de 32 bits.

Los objetos de memoria asignados por GlobalAlloc y localAlloc están en páginas privadas y confirmadas con acceso de lectura y escritura a los que no pueden acceder otros procesos. La memoria asignada mediante GlobalAlloc con GMEM_DDESHARE no se comparte globalmente, ya que se encuentra en Windows de 16 bits. Este valor no tiene ningún efecto y solo está disponible para la compatibilidad. Las aplicaciones que requieren memoria compartida para otros fines deben usar objetos de asignación de archivos. Varios procesos pueden asignar una vista del mismo objeto de asignación de archivos para proporcionar memoria compartida con nombre. Para obtener más información, vea asignación de archivos .

Las asignaciones de memoria solo están limitadas por la memoria física disponible, incluido el almacenamiento en el archivo de paginación en el disco. Al asignar memoria fija, GlobalAlloc y LocalAlloc devuelve un puntero que el proceso de llamada puede usar inmediatamente para acceder a la memoria. Al asignar memoria desplazable, el valor devuelto es un identificador. Para obtener un puntero a un objeto de memoria extraíble, use las funcionesglobalLocky LocalLock.

El tamaño real de la memoria asignada puede ser mayor que el tamaño solicitado. Para determinar el número real de bytes asignados, use la funciónGlobalSize o LocalSize. Si la cantidad asignada es mayor que la cantidad solicitada, el proceso puede usar toda la cantidad.

Las funciones GlobalReAlloc y LocalReAlloc cambian el tamaño o los atributos de un objeto de memoria asignado por GlobalAlloc y LocalAlloc. El tamaño puede aumentar o disminuir.

Las funciones GlobalFree y LocalFree liberan memoria asignada por GlobalAlloc, LocalAlloc, GlobalReAlloco LocalReAlloc. Para descartar el objeto de memoria especificado sin invalidar el identificador, use la funciónGlobalDiscard o LocalDiscard. El identificador se puede usar más adelante GlobalReAlloc o LocalReAlloc para asignar un nuevo bloque de memoria asociado al mismo identificador.

Para devolver información sobre un objeto de memoria especificado, use la funciónGlobalFlags o LocalFlags. La información incluye el recuento de bloqueos del objeto e indica si el objeto se puede descartar o ya se ha descartado. Para devolver un identificador al objeto de memoria asociado a un puntero especificado, use la función GlobalHandle o LocalHandle.

comparación de métodos de asignación de memoria