O Que é um Estouro de Pilha?

Escrito por amber d. walker | Traduzido por moises albuquerque
  • Compartilhar
  • Tweetar
  • Compartilhar
  • Pin
  • E-mail
O Que é um Estouro de Pilha?
Programação de computadores (Stockbyte/Stockbyte/Getty Images)

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 é disponível. É um erro potencialmente sério que faz o programa com problema parar e usualmente é o resultado de um de dois possíveis erros de projeto.

Outras pessoas estão lendo

A pilha

A pilha refere-se à seção de memória que é usada para armazenar informação sobre as funções do programa. Os tamanhos e detalhes técnicos da pilha irão variar dependendo da linguagem de programação, compilador, sistema operacional e tipo de processador, e estes detalhes geralmente são escondidos do programador na maioria das linguagens de alto nível.

Exemplo de pilha

Considere o seguinte exemplo em pseudocódigo:

funcao a { 1. chama funcao b. 2. chama funcao c. }

funcao b { 1. chama funcao c. 2. Imprime Spot. }

funcao c { 1. Imprime Run. }

Uma vez que cada função pode chamar outras funções, a pilha existe para manter o controle de onde continuar dentro da função pai depois que uma função filha retorna. Neste exemplo, se parado dentro da função c, poderemos ter uma pilha parecida com isto:

> A1 ---> B1 --------> C1

Como a primeira linha da função A chama a função B, e a primeira linha da função B chama a função C. Após a função C terminar, o programa vai continuar para trás na cadeia, rodando B2 e, finalmente A2.

Recursão infinita

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

funcao A { 1. chama funcao A. }

E a pilha resultante:

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

Aqueles que estão familiarizados com programação de computadores irão reconhecer isto como uma variação do loop infinito, exceto que, ao invés de rodar para sempre, este programa irá eventualmente consumir toda a memória na pilha, resultando em um travamento e em um erro de estouro de pilha.

Prevenção

Erros de estouro de pilha geralmente ocorrem quando se tenta implementar algoritmos recursivos, e a chave para evitar a maioria dos erros é assegurar-se que o seguinte será 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, e a função recursiva deve ser projetada de modo a que cada camada de recursão adicionada deve trazer a função para mais perto da condição de saída.

Variáveis locais grandes

Outra causa, muito mais rara, de erros de estouro de pilha é a declaração de variáveis ​​locais muito grandes, geralmente na forma de vetores contendo centenas de milhares, ou milhões, de elementos. A forma mais simples de evitar estouros de pilha nessa situação é usar ponteiros e alocação dinâmica de memória para evitar a declaração de dados na pilha quando tais operações intensivas de memória são chamadas.

Não perca

Filtro:
  • Geral
  • Artigos
  • Slides
  • Vídeos
Mostrar:
  • Mais relevantes
  • Mais lidos
  • Mais recentes

Nenhum artigo disponível

Nenhum slide disponível

Nenhum vídeo disponível