Mi sa che ti sei un po' confuso. Non è che il compilatore assegni il valore 9835729 ad una variabile se non viene inizializzata esplicitamente. Non assegna proprio nessun valore. L'unica cosa che il compilatore fa (quando le variabili non vengono anche inizializzate) è dare significato alla variabile in termini di indirizzi di memoria. Cmq Level ha detto una cosa giusta, e la differenza sta nel fatto che le variabili globali stanno nel segmento dati, e quelle locali sullo stack.

Le variabili globali corrispondono ad un indirizzo nell'heap (quando il programma in esecuzione), ma in effetti vengono inizializzate in fase di compilazione a valori standard (quale 0) e sono parte integrante del programma in fatto di dimensioni, perché vengono memorizzate proprio nello stesso file eseguibile.

Le variabili locali vengono poste sullo stack, che è una parte della memoria soggetta a continui cambiamenti, perché come ho detto, è lì che vengono memorizzate le variabili locali. Tuttavia, il compilatore non si preoccupa di vedere cosa ci sia sullo stack, e si limita a dire in quale indirizzo dello stack tale variabile deve essere collocata. Nient'altro.

Ciao.