09/03/08 01:38:45
>>297
私の知識不足で非初期化データ領域や物理メモリと言われても、ぱっと理解できなかったのですが
以下のような考えでよいのでしょうか?
私の使っているOS(WinsowsXP)の場合
・関数内で宣言するローカル変数の場合
void main(){
int a; //この時点で非初期化データ領域に変数aの存在が知らされる。
printf("%d\n", a); //この時点では値を代入したわけではないので何が表示されるか分からない(物理メモリにはaが存在しないのでメモリの使用量は増えない)
a = 0; //値が代入された(これによりaには0という値が存在するということになり物理メモリに割り当てられメモリの使用量が増える)
printf("%d\n", a); //0が表示される(物理メモリにはaが存在する)
}
・関数外で宣言するグローバル変数の場合
int b; //この時点で非初期化データ領域に変数bの存在が知らされる。
void main(){
printf("%d\n", b); //0が表示される(物理メモリに割り当てられているわけではないがグローバル変数なので特別にbは0として扱える)
b = 0; //値が代入された(これによりbには0の値が存在するということになり物理メモリに割り当てられメモリの使用量が増える)
printf("%d\n", b); //0が表示される(物理メモリにはbが存在する)
}