Programação  
 
Conhecimento computador >> Programação >> Programação De Computador Idiomas >> 
O que é o estouro de pilha
? Um estouro de pilha é um tipo de erro de programação que ocorre quando um programa tenta alocar mais memória na pilha de chamadas do que está disponível. É um erro potencialmente grave que faz com que o programa ofensivo para bater e, geralmente, é o resultado de um de dois erros de projeto. O Stack

A pilha refere-se a uma seção de memória que é usado para armazenar informações sobre as funções de um programa. Os tamanhos e detalhes técnicos da pilha será variar de acordo com a linguagem de programação , compilador, sistema operacional e tipo de processador, e esses detalhes são geralmente escondida do programador na maioria das linguagens de alto nível.
Exemplo
Stack

Considere o seguinte exemplo em pseudocódigo :

funcionar a { 1. chamar função b.2 . chamar a função c . }

função b {1 . chamar função c.2 . Imprimir Spot. }

Função c {1 . Tiragem . }

Como cada função pode chamar outras funções , existe a pilha para manter o controle de onde na função de pai para continuar depois de função uma criança retorna. Este exemplo, se parou dentro da função c , pode ter uma pilha que é algo como isto:

> A1 ---> B1 --------> C1
< p > Desde a primeira linha da função A chama a função B, ea primeira linha da função B chama a função C. Após função C vai terminar , o programa vai continuar de volta para a cadeia , correndo B2 e finalmente A2.

Recursão Infinita

um estouro de pilha ocorre quando um programa tenta armazenar muita informação na pilha. A causa mais comum de um estouro de pilha é um erro de design chamado recursão infinita . Considere o seguinte exemplo em pseudocódigo :

função A { 1. chamar a função A. }

E a pilha resultante :

-> A1 ---> A1 --------> A1 ------- -------> A1 (e assim por diante)

Aqueles familiarizados com programação de computador vai reconhecer isso como uma variação do loop infinito , a não ser , em vez de correr para sempre , este programa irá eventualmente consumir todo a memória na pilha , resultando em um acidente e um erro de estouro de pilha.
Prevenção

erros de estouro de pilha geralmente ocorrem quando se tenta implementar algoritmos recursivos , ea chave para evitar a maioria dos erros é garantir que o seguinte é verdadeiro para todas as implementações recursivas : a função recursiva deve conter uma condição de saída que não crie outra camada de recursão , ea função recursiva deve ser concebido de modo que cada camada de recursão adicionado deve trazer a função mais próxima da condição de saída .
grandes variáveis ​​locais

Outra causa muito mais raros de erros de estouro de pilha é a declaração de grandes variáveis ​​locais , geralmente sob a forma de matrizes contendo centenas de milhares, ou milhões , de elementos . A maneira mais simples para evitar estouros de pilha nesta situação é a utilização de ponteiros e alocação dinâmica de memória para evitar declarar os dados na pilha quando tais operações intensivas de memória são chamados.

Anterior :

Próximo : No
  Os artigos relacionados
·Como alterar a ordem das colunas de DataGrid 
·Definição de Labels Marquee 
·Diferenças entre o objeto abstrato Tipos de Dados e Ab…
·Como liberar o buffer de Publicações Seriadas em MATL…
·Como criar um feed RSS a partir de sua página ColdFusi…
·Funções para String no Oracle SQL 
·Quais são as duas línguas mais comumente utilizado pa…
·Qual é a descrição da verificação & Process Testin…
·Como Graph Algoritmos 
·Como determinar numérico de precisão em Fortran 
  Artigos em destaque
·Como desfazer um commit no Subversion 
·Como criar funções personalizadas em Filemaker 
·Como remover NaNs & INF A partir de uma matriz no MATLA…
·Como usar CoffeeCup StyleSheet Maker 
·Como verificar um valor nulo 
·Como criar uma filial SVN de um arquivo vivo 
·Lógica booleana permite que você para que 
·Como faço para salvar um arquivo no Xcode 
·Vantagens e Desvantagens do Turbo Pascal 
·Como fazer um Rollover ou Passe o mouse sobre 
Cop e direita © Conhecimento computador http://ptcomputador.com Todos os Direitos Reservados