Administración de memoria: asignación de marcos
La asignación en el cuadro toma su nombre de “marco de pila” que es configuración siempre que se llame a una función.El marco de pila es un área de memoria que almacena temporalmente los argumentos a la función así como las variables que se local definido a la función.Las variables de capítulos a menudo se denominan variables “automáticas” porque el compilador automáticamente asigna espacio para ellos.
Hay dos características clave de las asignaciones del cuadro.Primero, cuando define una variable local, suficiente espacio se asigna en el marco de pila para la variable completa, aunque es una matriz o una estructura de datos grande.En segundo lugar, las variables de marco automáticamente se eliminan cuando salen del ámbito:
void MyFunction()
{
// Local object created on the stack
CString strName;
// Object goes out of scope and is deleted as function ends
}
Para las variables de la función local, esta transición de ámbito ocurre cuando sale de la función, pero el ámbito de una variable de cuadro puede ser menor que una función si se utilizan llaves anidadas.Esta eliminación automática de las variables de marco es muy importante.En el caso de tipos primitivos simples (como int o byte), las matrices, o estructuras de datos, la eliminación automática reclaman simplemente la memoria utilizada por la variable.Dado que la variable ha salido del ámbito, no será accesible de todos modos.En el caso de objetos de C++, sin embargo, el proceso de eliminación automática es un poco más complejo.
Cuando un objeto se define como variable de marco, invoque a su constructor automáticamente en el punto donde se encuentra la definición.Cuando el objeto salga del ámbito, el destructor se invoca antes de que la memoria del objeto se reclame.Esta construcción y destrucción automáticas pueden ser muy procedimientos, pero debe tener en cuenta las llamadas automáticas, especialmente al destructor.
La ventaja clave de asignar objetos en el cuadro es que automáticamente se eliminarán.Cuando asigna objetos en el cuadro, no tiene que preocuparse de objetos olvidados produciendo pérdidas de memoria.(Para obtener detalles sobre las pérdidas de memoria, vea el artículo Detectar pérdidas de memoria en MFC.) Una desventaja de la asignación del cuadro es que las variables de marco no se pueden utilizar fuera del ámbito.Otro factor de elegir la asignación del cuadro en la asignación de pila es que para las estructuras grandes y objetos, suele ser preferible utilizar la pila en lugar de la pila para el almacenamiento desde el espacio de pila se limita a menudo.