Por que os erros de stackoverflow são caóticos?

Esse programa C simples raramente termina na mesma profundidade de chamada:

#include <stdio.h>
#include <stdlib.h>

void recursive(unsigned int rec);

int main(void)
{
  recursive(1);
  return 0;
}

void recursive(unsigned int rec) {
    printf("%u\n", rec);
    recursive(rec + 1);
}

Quais poderiam ser as razões por trás desse comportamento caótico?

Eu estou usando o fedora (16GiB de ram, tamanho da pilha de 8192) e compilado usando o cc sem nenhuma opção.

EDITAR

Estou ciente de que este programa lançará um stackoverflowEu sei que a habilitação de algumas otimizações do compilador mudará o comportamento e que o programa atingirá o número inteiro.Estou ciente de que esse é um comportamento indefinido, o objetivo desta pergunta é entender / obter uma visão geral dos comportamentos internos específicos da implementação que podem explicar o que observamos lá.

A questão é mais, já que no Linux o tamanho da pilha de threads é fixo e fornecido porulimit -s, o que influenciaria o tamanho da pilha disponível para que o fluxo de pilha nem sempre ocorra na mesma profundidade de chamada?

EDIT 2 O @BlueMoon sempre vê a mesma saída em seu CentOS, enquanto no meu Fedora, com uma pilha de 8M, vejo saídas diferentes (último número impresso inteiro 261892 ou 261845 ou 261826 ou ...)

questionAnswers(7)

yourAnswerToTheQuestion