O que é um transbordamento de pilha?

O estouro de pilha é um erro de programação no qual uma tentativa de gravar dados em um bloco específico de memória falha porque não há espaço no bloco. Esse tipo de erro ocorre da mesma maneira que os transbordamentos de buffer, transbordamentos de pilhas e buffer de empilhamento transbordando. A diferença entre esses tipos de erros depende da estrutura de dados do computador que está sendo usada, e o recurso comum é que ocorre uma tentativa de escrever mais dados do que o espaço disponível para mantê -lo. Em C ++, um excesso de pilha geralmente se manifesta como uma falha de segmentação e, freqüentemente, não há informações adicionais fornecidas para determinar onde ou como o transbordamento aconteceu. Um estouro em Java geralmente resulta em uma falha de máquina virtual que fornece um arquivo de erro razoavelmente detalhado. Independentemente da linguagem em que um transbordamento acontece, o transbordamento quase sempre pode ser corrigido porDepuração e identificação da fonte de transbordamento original.

linguagens de computador que oferecem gerenciamento explícito de memória geralmente são mais fáceis de proteger contra o excesso de pilha. A prática de programação amplamente aceita geralmente determina que, para todos os segmentos de memória que um programa aloca, o programa também deve se excitar. O C ++ permite esse mecanismo, e o monitoramento cuidadoso dessa maneira pode manter a quantidade de memória que um programa usa ao mínimo. Os idiomas que não oferecem gerenciamento explícito de memória e, em vez disso, usam gerenciamento implícito de memória, são mais difíceis de proteger dos erros de transbordamento de pilha. Java lida com sua própria memória dentro de sua máquina virtual, portanto os dados não podem ser explicitamente excluídos à vontade para abrir espaço para mais.

Um erro comum dos programadores iniciantes é assumir que um transbordamento de pilha não pode ocorrer em linguagens de computador que lidam com seu próprio gerenciamento de memória. Enquanto isso parece plausibeA princípio, na verdade não é o caso. Idiomas com gerenciamento implícito de memória geralmente possuem coletores de lixo que gratuitos de bloqueios desnecessários de memória, mas esses coletores de lixo nem sempre funcionam na época que um programador espera. Confiar em coletores de lixo é relativamente perigoso e nem sempre pode proteger um programa de um erro de transbordamento.

Os erros

Overflow podem ser cataclísmicos e interromper um programa inteiro, ou podem ficar quase silenciosos e permitir que um programa continue em diante. Esses segundos tipos de erros geralmente são os mais difíceis de encontrar, porque pode ocorrer um erro que veio de um excesso de muitas linhas de código antes. Um transbordamento de pilha geralmente não exige pesquisar em um programa inteiro, mas quanto mais um programa pode ser executado após um transbordamento, mais difícil será o erro de encontrar e corrigir.

OUTRAS LÍNGUAS

Este artigo foi útil? Obrigado pelo feedback Obrigado pelo feedback

Como podemos ajudar? Como podemos ajudar?