Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A alocação no quadro leva seu nome do "quadro de pilha" que é configurado sempre que uma função é chamada. A estrutura de pilha é uma área de memória que mantém temporariamente os argumentos da função, bem como quaisquer variáveis definidas locais à função. As variáveis de quadro são frequentemente chamadas de variáveis "automáticas" porque o compilador aloca automaticamente o espaço para elas.
Existem duas características principais das alocações de frames. Primeiro, quando você define uma variável local, espaço suficiente é alocado no quadro da pilha para armazenar a variável inteira, mesmo que seja uma grande matriz ou estrutura de dados. Em segundo lugar, as variáveis de quadro são excluídas automaticamente quando saem do escopo:
void MyFunction()
{
// Local object created on the stack
CString strName;
// Object goes out of scope and is deleted as function ends
}
Para variáveis de função local, essa transição de escopo acontece quando a função é encerrada, mas o escopo de uma variável de quadro pode ser menor do que uma função se chaves aninhadas forem usadas. Essa exclusão automática de variáveis de quadro é muito importante. No caso de tipos primitivos simples (como int ou byte), matrizes ou estruturas de dados, a exclusão automática simplesmente recupera a memória usada pela variável. Como a variável saiu do escopo, ela não pode ser acessada de qualquer maneira. No caso de objetos C++, no entanto, o processo de exclusão automática é um pouco mais complicado.
Quando um objeto é definido como uma variável de quadro, seu construtor é automaticamente invocado no ponto onde a definição é encontrada. Quando o objeto sai do escopo, seu destruidor é automaticamente invocado antes que a memória do objeto seja recuperada. Esta construção e destruição automática pode ser muito útil, mas deves estar atento às chamadas automáticas, especialmente ao destrutor.
A principal vantagem de alocar objetos no quadro é que eles são excluídos automaticamente. Ao alocar seus objetos no quadro, você não precisa se preocupar com objetos esquecidos que causam vazamentos de memória. (Para obter detalhes sobre vazamentos de memória, consulte o artigo Detetando vazamentos de memória no MFC.) Uma desvantagem da alocação de quadros é que as variáveis de quadro não podem ser usadas fora de seu escopo. Outro fator na escolha entre a alocação no frame e a alocação na pilha é que, para grandes estruturas e objetos, muitas vezes é melhor usar o heap em vez da pilha para armazenamento, uma vez que o espaço na pilha geralmente é limitado.