Negocio

O que é Stack Overflow? – Erros, exceções e causas

Definição de uma pilha

Em programação de computador, uma pilha é um conceito em que reservamos um local para armazenar uma pilha de itens, mas só podemos chegar ao que está no topo. O resto dos itens são praticamente inacessíveis abaixo do de cima. Só podemos chegar ao item superior porque uma pilha é realmente uma estrutura abstrata onde o último item que você colocou nela deve ser removido primeiro para alcançar os itens anteriores. Chamamos isso de last in first out , ou LIFO . Pilhas de computador são realmente úteis porque nos permitem reservar armazenamento temporário, para que possamos passar números (ou ponteiros de programa e variáveis ​​de programa, que são muito parecidos com números) entre funções de programa (uma função faz coisas com números).

Uma maneira realmente boa de visualizar uma pilha é imaginar uma pilha de pratos em uma lanchonete. Você não conseguiria pegar um do meio com muita facilidade, não é? Não, quando você está na fila de uma lanchonete, você não quer atrasar as pessoas atrás de você, então você pega o que está por cima. As pilhas de computador funcionam praticamente da mesma maneira, então os programas podem ser executados muito rápido. Em essência, os itens em uma pilha são removidos na ordem reversa (os últimos a entrar são os primeiros a sair).

Empilhar e estourar

Quando você adiciona um item (geralmente chamado de elemento) ao topo de uma pilha, isso é chamado de push . Empurrar é uma boa palavra para isso, porque o novo item empurra todos os antigos para baixo. Se você já trabalhou em uma lanchonete ou cozinha de restaurante, eixos com mola para pratos são muito comuns. O peso das placas no topo empurra as placas inferiores para baixo.

Quando você remove um item de uma pilha, isso é chamado de pop . Em uma cafeteria, quando você remove o prato de cima, os que estão embaixo dele saltam por causa da mola embaixo deles. Bem, uma pilha de computador é mais ou menos assim.

Stack Underflow e Overflow

Agora que temos uma imagem básica em mente da aparência conceitual de uma pilha, podemos definir o que são underflow e overflow. O estouro negativo da pilha acontece quando tentamos estourar (remover) um item da pilha, quando na verdade não há nada para remover. Isso irá disparar uma espécie de alarme no computador porque dissemos a ele para fazer algo que não pode ser feito.

O estouro de pilha acontece quando tentamos colocar mais um item em nossa pilha do que ele realmente pode conter. Veja, a pilha geralmente pode conter apenas algumas coisas. Normalmente, alocamos (separamos) onde a pilha ficará na memória e quão grande ela pode ficar. Portanto, quando colocamos muitas coisas lá ou tentamos remover nada, geraremos uma condição de estouro de pilha ou uma condição de estouro insuficiente, respectivamente.

Um erro versus uma exceção

Você pode pensar que apenas os humanos cometem erros, mas os computadores cometem erros o tempo todo (muitas vezes porque os humanos mandaram!). Você sabia que o primeiro bug de computador não foi feito por uma pessoa, foi uma mariposa real dentro de um grande computador? Hoje em dia, um computador está à procura de bugs, então quando um computador tem um problema ou comete um erro, ele dispara algum tipo de alarme antes que as coisas fiquem realmente ruins. Geralmente, podemos dividir esse alarme em dois tipos, chamados de erros e exceções.

Um erro é um alarme que normalmente interrompe outras operações. O computador encontrou um problema e não sabe o que fazer, portanto, deve ser consertado antes de reiniciar a operação. Um programador deve depurá-lo ou o usuário deve reinicializar o computador.

Uma exceção é um erro que podemos tratar sem parar ou reiniciar completamente. Os programadores geralmente escrevem manipuladores de exceção propositalmente, para capturar exceções caso ocorram inesperadamente.

Nossa pilha também pode causar erros ou exceções. Underflow e overflow são duas formas possíveis de gerá-los. Se nossa pilha perceber que houve um erro, mas ela puder se recuperar sem piorar as coisas, isso geralmente significa que ocorreu uma exceção. No entanto, se algo muito ruim aconteceu (ou pode acontecer se não interrompermos tudo imediatamente), isso significa que ocorreu um erro.

Causas do estouro de pilha

Por que ocorre o estouro de pilha? Na maioria das vezes, se tentarmos colocar muitas coisas em nossa pilha, ela irá transbordar o local para o qual abrimos espaço. Aqui está um exemplo. Digamos que nosso porta-pratos em nossa lanchonete tenha capacidade para 50 pratos, e um novo funcionário tentou colocar 51 lá. Vai transbordar. Ou talvez o novo proprietário tenha decidido que nosso refeitório podia acomodar 55 pessoas em vez de 50, mas esqueceu que nosso porta-pratos só comporta 50 pratos. Opa.

Outra causa de estouro de pilha é quando simplesmente não há memória física suficiente, mesmo se alocamos bastante para nossa pilha (as pilhas geralmente aumentam ou diminuem e, eventualmente, encontram outras coisas na memória). O culpado mais provável, porém, é algo conhecido como recursão . Recursão significa apenas que uma função de programa chamou a si mesma e, cada vez que o faz, coloca mais coisas na pilha. Muito rapidamente, essa pilha ficará muito grande, porque nada vai estourar esse material temporário.

Resumo da lição

Vamos revisar nosso aprendizado sobre estouro de pilha, certo? Uma pilha é um local para armazenar uma pilha de itens, mas só podemos chegar ao topo. Os itens em uma pilha devem ser removidos na ordem inversa. Quando colocamos um novo item na pilha, isso é chamado de push . Quando removemos o item superior, isso é chamado de pop . O estouro negativo acontece quando tentamos retirar um item de uma pilha vazia. O estouro acontece quando tentamos colocar mais itens em uma pilha do que ela pode conter. Um erro é um erro que provavelmente não pode ser recuperado. Uma exceção é um erro que geralmente pode ser tratado, para que o programa possa se recuperar. A causa mais comum de estouro de pilha é a recursão, o que significa que uma função de computador chamou a si mesma e está empilhando coisas demais na pilha, sem nenhuma maneira de retirá-las. Então, da próxima vez que você estiver em um refeitório, imagine como seria a vida sem pilhas de pratos, além de alguma maneira de saber quando essas pilhas transbordaram.