Catching estouro de pilha

Qual é a melhor maneira de capturar o estouro de pilha em

Mais especificamente

m programa C contém um intérprete para uma linguagem de scrip

s scripts @ não são confiáveis e podem conter erros de recursão infinitos. O intérprete deve ser capaz de capturá-los e continuar sem problemas. (Obviamente, isso pode ser parcialmente tratado usando uma pilha de software, mas o desempenho é bastante aprimorado se pedaços substanciais de código de biblioteca puderem ser escritos em C; no mínimo, isso implica em funções C executando sobre estruturas de dados recursivas criadas por scripts.)

A forma preferida de capturar um estouro de pilha envolveria longjmp de volta ao loop principal. (Não há problema em descartar todos os dados mantidos em quadros de pilha abaixo do loop principal.)

A solução portátil de fallback é usar endereços de variáveis locais para monitorar a profundidade atual da pilha e para cada função recursiva conter uma chamada para uma função de verificação de pilha que usa esse método. Obviamente, isso gera uma sobrecarga de tempo de execução no caso normal; isso também significa que, se eu esquecer de colocar a chamada de verificação de pilha em um só lugar, o intérprete terá um erro latent

Existe uma maneira melhor de fazer isso? Especificamente, não estou esperando uma solução portátil melhor, mas se eu tivesse uma solução específica do sistema para Linux e outra para Windows, tudo be

Vi referências a algo chamado tratamento de exceção estruturada no Windows, embora as referências que eu vi tenham sido sobre a tradução disso no mecanismo de tratamento de exceção C ++; ele pode ser acessado a partir de C e, em caso afirmativo, é útil para esse cenário?

Entendo que o Linux permite capturar um sinal de falha de segmentação; é possível transformar isso de maneira confiável em um longjmp no loop principal?

@Java parece suportar a captura de exceções de estouro de pilha em todas as plataformas; como isso implementa?

questionAnswers(3)

yourAnswerToTheQuestion