Compartir a través de


CMemoryState Structure

Proporciona una manera cómoda de detectar pérdidas de memoria en el programa.

struct CMemoryState

Members

Constructores públicos

Name

Descripción

CMemoryState::CMemoryState

Construye un clase- como la estructura que controla los puntos de control de memoria.

Métodos públicos

Name

Descripción

CMemoryState::Checkpoint

Obtiene una instantánea (punto de control) del estado actual de la memoria.

CMemoryState::Difference

Calcula la diferencia entre dos objetos de CMemoryStateescrito.

CMemoryState::DumpAllObjectsSince

Vuelca un resumen de todos los objetos actualmente asignados desde un punto de control anterior.

CMemoryState::DumpStatistics

Estadísticas de asignación de memoria de las print para un objeto de CMemoryState .

Comentarios

CMemoryState es una estructura y no tiene una clase base.

Una “pérdida de memoria” aparece cuando la memoria para un objeto está asignada en el montón pero no se desasigna cuando ya no es necesario. Tales pérdidas de memoria pueden causar finalmente a errores de hacia fuera-de- memoria. Hay varias maneras de asignar y desasignar de memoria en el programa:

  • Mediante la familia de malloc/defree de funciones de la biblioteca en tiempo de ejecución.

  • Mediante las funciones de administración de memoria de la API de Windows, LocalAlloc/LocalFree y GlobalAlloc/GlobalFree.

  • Mediante C++ nuevo y operadores de borrar .

Los diagnósticos de CMemoryState sólo detecta las pérdidas de memoria producidas cuando la memoria asignada mediante el operador de nuevo no se desasigna mediante borrar. Los otros dos grupos de funciones de administración de memoria son para programas no diseñados para C++, y mezclar los con nuevo y borrar en el mismo programa no se recomienda. Una macro adicional, DEBUG_NEW, se proporciona para reemplazar el operador de nuevo cuando necesite el seguimiento de archivo y número de línea de asignaciones de memoria. Se utilizaDEBUG_NEW siempre que se emplearía normalmente el operador de nuevo .

Como con otros diagnósticos, los diagnósticos de CMemoryState solo están disponibles en versiones de depuración del programa. Una versión de depuración debe tener la constante de _DEBUG definida.

Si sospecha que el programa tiene una pérdida de memoria, puede utilizar Checkpoint, Difference, y las funciones de DumpStatistics para detectar la diferencia entre el estado de memoria (objetos asignados) en dos puntos distintos en la ejecución del programa. Esta información puede ser útil para determinar si una función está limpiar todos los objetos que asigna.

Si simplemente saber dónde el desequilibrio en la asignación y la desasignación aparece no proporciona suficiente información, puede utilizar la función de DumpAllObjectsSince para volcar todos los objetos asignados desde la llamada anterior a Checkpoint. Este volcado de memoria muestra el orden de asignación, el archivo de código fuente y la línea donde el objeto fue asignado (si utiliza DEBUG_NEW para la asignación), y la derivación de objeto, la dirección, y su tamaño. DumpAllObjectsSince también llama a la función de Dump de cada objeto para proporcionar información sobre el estado actual.

Para obtener más información sobre cómo utilizar CMemoryState y otros diagnósticos, vea Aplicaciones MFC de depuración.

NotaNota

Las declaraciones de objetos de CMemoryState escrito y de llamadas a las funciones miembro deben estar incluido entre las directivas de #if defined(_DEBUG)/#endif.Esto hace que los diagnósticos de memoria que se incluirán solo en compilaciones de depuración del programa.

Jerarquía de herencia

CMemoryState

Requisitos

encabezado: afx.h

Vea también

Referencia

Gráfico de jerarquías