0

私の知る限り、ローカル変数は初期化されていません。つまり、ガベージ値が含まれています。しかし、次のプログラムは出力として 0 (ゼロ) を与えています。

main()
{
    int i;
    printf("%d\n",i);
}

上記のプログラムを実行すると、常に0が返されます。0もガベージ値になる可能性があることはわかっていますが、出力としてゼロを取得するたびに。その理由を知っている人はいますか?

4

6 に答える 6

2

ただの事故だと思います。ローカル変数は確かに初期化されていませんが、コンパイラが (int i) 変数に割り当てるメモリは現在のプロセスで以前に使用されていないため、ガベージ値はありません。

于 2013-07-15T06:14:38.477 に答える
0

私の知る限り、Linux の初期化されていない変数は、最初にゼロ ページ (ゼロのみを含む特別なページ) に「割り当て」られます。
次に、初期化された変数への最初の書き込みで、変数はゼロページから書き込み保護されていない別のページに移動されます。

于 2013-07-15T09:02:45.537 に答える