Почему ошибки stackoverflow хаотичны?
Эта простая программа на C редко заканчивается на одной и той же глубине вызова:
#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);
}
Какие могут быть причины этого хаотического поведения?
Я использую Fedora (16 ГБ оперативной памяти, размер стека 8192), и скомпилирован с помощью CC без каких-либо опций.
РЕДАКТИРОВАТЬ
Я знаю, что эта программа будет выбрасыватьЯ знаю, что включение некоторых оптимизаций компилятора изменит поведение и что программа достигнет целочисленного переполнения.Я знаю, что это неопределенное поведение, цель этого вопроса - понять / получить представление о конкретных внутренних поведениях реализации, которые могут объяснить то, что мы наблюдаем там.Вопрос больше, учитывая, что в Linux размер стека потоков фиксирован и задаетсяulimit -s
Что повлияет на доступный размер стека, чтобы стекопоток не всегда происходил на одной и той же глубине вызова?
РЕДАКТИРОВАТЬ 2 @BlueMoon всегда видит одни и те же выходные данные на своем CentOS, в то время как на моей Fedora со стеком 8M я вижу разные выходные данные (последнее напечатанное целое число 261892 или 261845, или 261826, или ...)