質問: コンピュータサイエンス アドレスとメモリについて質問です。 一例として、以下を考えます。 変数などを確保したときメモリが確保され、そのメモリにアドレスが存在することを前提とする。 1.変数を宣言したとき、その変数を格納するためのメモリが確保される。 2.そのメモリの場所を示すアドレスが用意されます。 3.アドレス用にメモリが確保される。 4.アドレス用のメモリのアドレスが確保される。 という流れだと思ってます。 すると、3と4が無限ループしていることになり、使用メモリが無限になり, おかしいはずです。 実際に、コンピュータ上では、このループが起こっていないと思います。 すなわち、4の工程がないと考えます。 すると、アドレスが格納されているメモリにはアドレスが存在しないことになり、前提と矛盾します。 前提が間違いなのか、それとも、別の部分で間違っているのかを教えてください。 その理由も詳しく教えてください。 よろしくお願いします。 理解がしやすく、詳細な回答をベストアンサーにさせていただきます。
回答: C言語は宣言の仕方によってメモリの使い方が違います。 自動変数、グローバル変数、mallocなどで確保した変数、の3つです。 このうち、自動変数とグローバルとして定義された変数について、質問者様はコンパイラが気を利かせて自動でメモリを確保してきてくれているんだろうとお考えで、それ故このような質問が出てきたのかと思われます ですが、この前者2つについては、メモリの確保は行われていません。ですから、1も起きていません。 一般的にプログラムが使うメモリは、スタック領域、静的領域、ヒープ領域があります C言語では、自動変数はスタック領域、グローバル変数などは静的領域、mallocで確保する領域がヒープ領域を使います スタック領域は、FIFOバッファです。プログラムで指定した変数は、「現在のポインタからn個目のアドレス」と言う形でアクセスされます 静的領域は、プログラムが実行したときに自動的に確保され与えられるメモリ領域です、ここには「静的領域のn番目」と言う形でアクセスされます このnは固定の値になるのでプログラムコード自体に固定値として書き出されます。ですから、アドレスを保存するメモリは必要はありません