0

これはかなり込み入った質問になるでしょうが、ポインタについて学び始めて以来、プログラムの実行時に舞台裏で何が起こるかについて非常に興味がありました。

私の知る限り、コンピュータのメモリは一般的に、個々のバイトに均等に分割された長いメモリの帯と考えられています。確かに、次のような写真はそのような比喩を呼び起こします。

p_to_c パ 割り当てる

私が疑問に思っていることの 1 つは、メモリ アドレス自体が何を表しているのかということです。メモリ アドレスが 8 桁の 16 進数値 (例: 00EB5748) として表示されるのは偶然ではないと確信しています。どうしてこれなの?

さらに、変数 x を宣言すると、メモリ レベルで何が起こっているのでしょうか。コンパイラは、データ ストレージ用にランダム アドレス (+ 変数の型に必要な連続したアドレスの数) を予約しているだけですか?

ここで、x が 2 バイトのメモリ (つまり、0 から 65536 の範囲の値) を占有する unsigned int であるとします。x = 12 と宣言すると、何が起こっているのでしょうか? 私が 12 に等しくしているのは何ですか? 私が概念図を描くとき、​​私は通常、一見何も占有していないように見える変数 (x) を指すアドレス (&x など) のボックスを持っています。

では、バイナリ レベルで何が起こっているのでしょうか。アドレス 00EB5748 は 111010110101011101001000 として扱われ、どこかに 12 の値が格納されていますか、それとも 1100 ですか?

ほとんどの場合、私の混乱と好奇心は、メモリ アドレスと実際に宣言されている値 (例: 12、'a'、-355.2) の関係に起因しています。別の例として、アドレス 00EB5748 が、ASCII チャートによると値が 115 である char 's' を指しているとします。メモリ内のその位置で適切な 1 と 0 を反転させることによって、値 115 を 1 バイトに格納する位置を記述するアドレスですか?

4

2 に答える 2

1

どんな本でも開いてください。ページが表示されます。各ページには番号があります。連続するページには連続した番号が付けられます。番号付きページと混同していませんか? 違うと思う。そうすれば、コンピューターのメモリと混同する必要はありません。書籍は、コンピューター時代以前の主記憶装置でした。コンピュータ メモリは本から基本概念を導き出しました。本にはページがあります -> コンピュータ メモリにはメモリ セルがあり、本にはページ番号があります -> コンピュータ メモリにはメモリ アドレスがあります。

  • 私が疑問に思っていることの 1 つは、メモリ アドレス自体が何を表しているのかということです。

数字。本のすべてのページのように、すべての記憶セルには番号があります。

  • さらに、変数 x を宣言すると、メモリ レベルで何が起こっているのでしょうか。コンパイラは、データ ストレージ用にランダム アドレス (+ 変数の型に必要な連続したアドレスの数) を予約しているだけですか?

メモリ マネージャは、占有されている一部のメモリ セルをマークし、最初に予約されたセルのアドレスをコンパイラに伝えます。コンパイラは、変数の名前と型をこのアドレスに関連付けます。(この写真は私の頭からのもので、不正確な場合があります)。

  • x = 12 と宣言すると、何が起こっているのでしょうか?

variable を宣言したときx、メモリ セルはこの変数用に予約されていました。12次に、これらのメモリ セルに書き込みます。12variable の型に応じて、何らかの方法でバイナリ コード化されていることに注意してくださいx。2 つのメモリ セルを占有する unsigned int の場合x、1 つのセルには 0 が含まれ、もう 1 つのセルには 12 が含まれます。12 の 2 進整数表現は

0000 0000 0000 1100
|_______| |_______|
  cell      cell  

12 が浮動小数点数の場合、別の方法でコーディングされます。

于 2013-06-21T17:47:29.617 に答える