コンピュータサイエンス アドレスとメモリについて質問です。 一例として、以下を考えます。 変数などを確保したときメモリが確保され、そのメモリにアドレスが存在することを前提とする。

補足

理論上の質問です。 実際には、ダブルポインタまでしか使わないことが多いと認識しています。

C言語関連52閲覧xmlns="http://www.w3.org/2000/svg">500

ベストアンサー

0

ThanksImg質問者からのお礼コメント

回答者のみなさん、ありがとうございました。 私の理解不足で、質問の意図がきちんと伝わっていなかったようです。 申し訳ないです。 xagnedさんの回答が一番知りたいand自身のモヤモヤが解消されたので、ベストアンサーに選ばさせていただきました。 ありがとうございました。

お礼日時:8/2 10:46

その他の回答(3件)

0

まず、メモリには初めからアドレスが振られています。 変数を用意した段階でアドレスが用意される訳ではありません。 そして、変数を宣言したときに行われる、 「変数(の値)を格納するためのメモリが用意される」 というのは、実際には、 「もとも存在するメモリの特定のアドレスに対して、変数を割り当てる。」 もう少し砕けた言い方をするなら、 「このアドレスはこの変数のデータの置き場にしようと、決める」 事を言います。 なので、変数を宣言しただけでは、実際のコンピュータは何一つ動作を行いません。 それはあくまでコンパイラが、内心で決める事であり、 実際にハードウェアとして、何らかの動作を行わうわけではないのです。 つまり、メモリの確保というものは、実際の動作としては存在しません。 なので、1から4全てが存在しません。 コンパイラがコンパイルを行う途中の処理の中にだけ、「メモリの確保」という概念的動作が存在します。 それは、変数名とアドレスを一時的な対応表へ登録するという形をとります。 コンパイルが完了したときには、変数は全てアドレスに置き換えられ、変数の概念は消失するので、 変数のためのメモリ確保という概念も無くなります。 あるのはただ、決められたメモリアドレスを使い回すコード群だけになります。

0

オペレーティングシステム、CPUによって何ギガバイトまでメモリを制御できるとされているのはご存じでしょう。つまり上限、管理できる限界があるということです。 メモリのには物理メモリと論理メモリが存在します。物理メモリがアドレスを記憶しておくところでそこはメモリ管理で制御されています。パソコンならBIOSというレベルです。 貴方のいうところの1、2項は論理メモリの確保です。大きな倉庫の棚といったところでしょう。そのアドレスは物理メモリが担当します。手元にもつ台帳です。そこは貴方のいうアドレス(棚の位置)を書き込みます。有限です。そのため論理メモリ(アドレス空間)は有限ということになります。 もちろん有限といっても使用しなくなったアドレスは上書きしていきますので全てのアドレスメモリーが埋まらない限り問題なく動作します。

0

ハードとソフトがごっちゃになってます。 まずハードの話しならメモリが並べられていてメモリにアドレスがふられています。 つまりメモリは箱でその箱に番地が付けられている感じです。 その番地をアクセスする事で箱の中身が読めたり書き変えたりする仕組みです。 次にソフトの話しですが、変数と言うのはコンパイラの話しでプログラマが番地を意識せずにプログラムできるようにした概念です。変数はC言語においてはメモリの番地にあたるものですがコンパイルリンクするまでは番地は分かりません。