Откуда берётся мусор?
Рассмотрим следующую программу:
#include <stdio.h>
int main () {
int a [100];
int i;
for (i=0; i<100; i++)
printf ("%d ", a[i]);
return 0;
}
При компиляции без оптимизации и вызове в Linux она выдаст некоторые числа, являющиеся мусорным содержимым памяти. Кто-нибудь в состоянии объяснить, откуда конкретно они берутся, и почему каждый раз разные при последовательных запусках программы?
Казалось бы, если это просто содержимое адресов, на которые приходится соответствующая секция исполняемого модуля, то оно должно бы сохраняться от запуска к запуску?
Объяснение в стиле “потому что виртуальные адреса мапируются на реальные рандомно” я и сам могу дать, хочется более глубокого понимания. Компьютер – вещь детерминированная, в нём случайность – это не познанная закономерность.
Upd: ответ дан уважаемым @alexvangog в закреплённом комментарии.