Compartir a través de


Administración de memoria: asignación de marcos

La asignación en el marco toma su nombre del "marco de pila" que se configura cada vez que se llama a una función. El marco de pila es un área de memoria que contiene temporalmente los argumentos de la función, así como cualquier variable que se defina localmente para la función. A menudo, las variables de marco se denominan variables "automáticas" porque el compilador asigna automáticamente el espacio para ellas.

Las asignaciones de marcos tienen dos características fundamentales. En primer lugar, cuando se define una variable local, se asigna suficiente espacio en el marco de pila para contener toda la variable, incluso si se trata de una matriz o estructura de datos de gran tamaño. En segundo lugar, las variables de marco se eliminan automáticamente cuando se 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 función locales, esta transición de ámbito se produce cuando se cierra la función, pero el ámbito de una variable de marco puede ser menor que una función si se usan las llaves anidadas. Esta eliminación automática de variables de marco es muy importante. En el caso de los tipos primitivos simples (como int o byte), las matrices o estructuras de datos, la eliminación automática simplemente reclama la memoria usada por la variable. Debido a que la variable se salió del ámbito, no se puede acceder a ella de ninguna manera. Sin embargo, en el caso de objetos de C++, el proceso de eliminación automática es un poco más complicado.

Cuando un objeto se define como una variable de marco, su constructor se invoca automáticamente en el punto donde se encuentra la definición. Cuando el objeto se sale del ámbito, su destructor se invoca automáticamente antes de que se recupere la memoria del objeto. Esta construcción y destrucción automáticas pueden ser muy útiles, pero se debe ser consciente de las llamadas automáticas, especialmente al destructor.

La ventaja clave de asignar objetos en el marco es que estos se eliminan automáticamente. Cuando se asignan los objetos en el marco, no se tiene que preocupar por los objetos olvidados que provocan pérdidas de memoria. (Para más información sobre las fugas de memoria, consulte el artículo Detección de fugas de memoria en MFC). Una desventaja de la asignación de marcos es que las variables de marco no se pueden usar fuera de su ámbito. Otro factor en la elección de la asignación de marcos a diferencia de la asignación del montón es que para las estructuras y objetos grandes, a menudo es mejor usar el montón en lugar de la pila para el almacenamiento, ya que el espacio de pila suele estar limitado.

Consulte también

Administración de memoria