Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 las variables definidas 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.
Hay dos características clave de las asignaciones de fotogramas. 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 es una matriz grande o estructura de datos. En segundo lugar, las variables de marco se eliminan automáticamente 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
}
En el caso de 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 llaves anidadas. Esta eliminación automática de variables de marco es muy importante. En el caso de tipos primitivos simples (como int
o byte), matrices o estructuras de datos, la eliminación automática simplemente reclama la memoria usada por la variable. Dado que la variable se ha quedado fuera del ámbito, no se puede acceder a ella de todos modos. 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 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 debe tener en cuenta las llamadas automáticas, especialmente al destructor.
La ventaja clave de asignar objetos en el marco es que se eliminan automáticamente. Al asignar los objetos en el marco, no tiene que preocuparse 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 fotogramas 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 fotogramas frente a la asignación del montón es que para 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.