14 - Otras funciones

[editar]
Tutorial creado por Juan Manuel. Extraido de: http://www.lawebdejm.com
30 de Noviembre de 1999
Ya hemos visto las funciones más típicas para el uso de montones. De todas formas, existen otras, que vamos a explicar a continuación:

HeapCompact

Se recorre la lista de bloques libres (free chain) intentando fundir los bloques pequeños que han sido fragmentados, en los bloques originales más grandes. Esta función nos retorna el tamaño del bloque reservado, comprometido y contiguo más grande que existe en el montón, aunque la gente de Microsoft no nos garantiza que una asignación de este tamaño (con la función HeapAlloc) se ejecute correctamente.

Además, esta función elimina el compromiso físico de todos los bloques libres, por lo que en siguientes asignaciones de memoria, se tendrá que comprometer nuevamente espacio físico.

HeapValidate

Recorre la lista enlazada de bloques de memoria que compone un montón (o un solo bloque), verificando que cada uno de estos bloques sea consistente.

HeapLock y HeapUnlock

Bloquea o desbloquea el montón especificado para que sólo pueda ser accedido por el hilo que llama a estas funciones. Estas funciones permiten realizar la sincronización manual entre hilos.

Las funciones GlobalX y LocalX

Estas funciones se incluyen por compatibilidad con las versiones de 16 bits de Windows. El sistema de gestión de montones es, quizá, el que más cambios sufrió en su implementación en Win32. Uno de los principales fue que en Windows 3.1, existía un montón en el proceso (el montón local) y otro común a todos los procesos (el montón Global). Para manejar estos montones se incluyeron dos grupos de funciones: las que manejaban el montón local (cuyo nombre comenzaba con Local) y las que manejaban el montón compartido (cuyo nombre comenzaba con Global).

En Win32 no tiene sentido esta separación, por lo que ambas funciones realizan la misma tarea: llamar a las funciones HeapXX.

La equivalencia en Win32 es sencilla de encontrar:

GlobalAlloc
LocalAlloc
HeapAlloc GlobalReAlloc
LocalReAlloc
HeapReAlloc GlobalFree
LocalFree
HeapFree GlobalX
LocalX
HeapX
El uso de la memoria fija (LMEM_FIXED), movible (LMEM_MOVEABLE), descartable (LMEM_DICARDABLE) o compartida (GMEM_SHARED) sería algo bastante largo de explicar, por lo que no voy a entrar en ese tema, ya que esta serie no trata sobre programación en Windows 3.1.

Nos valdrá con saber que una llamada a LocalX o GlobalX, se transformará en una llamada a HeapX.
Bien, ya conocemos las funciones para manejar uno o varios montones, pero... ¿para qué queremos varios montones? Antes de dar razones, vamos a profundizar la implementación del montón en Win32, para así comprender mejor el funcionamiento interno.
[editar]

2 opiniones

Estudiante.

Me pareció más que bueno.
Bueno.

Que trabajo!!!, no lo lei de manera completa, pero, si champeo, de seguro que no me equivoque al tomarme la molestia de bajarlo para estudiarlo a profundidad, gracias por el trabajo que dejas libre.

Tutoriales relacionados con 'Los rincones del API Win32: Los montones'

Curso que profundiza en el gestor de montones (o montículos) dentro de Win32, así como... Más »
Este curso trata el tema de la memoria en la plataforma Win32. En esta ocasión... Más »
Damos una visión detallada de una de las características más interesantes de esta tecnología de... Más »

Autor y licencia de 'Los rincones del API Win32: Los montones'


Tutorial de Juan Manuel. Extraido de: http://www.lawebdejm.com CopyLeft
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.