2016-06-29 8 views
0

私はLIFO、プッシュ、ポップという概念を知っています。変数のアドレスがRAM上の位置を示していますか?

コードが2245781という変数のアドレスを返す場合、Decimalを仮定すると、実際に変数がスタック上の2245781stバイトにあることを意味しますか?そして、それをギガバイトに変換すると、それはその瞬間のRAMの使用量の範囲内になりますか?そうでない場合、なぜですか?ヒープでも同じですか?

興味があるだけ。..

答えて

0

はい、変数のアドレスは、多くの場合、最新のデスクトップクラスのシステム上virtualalizedされるRAM内の位置、です。したがって、2つのプロセスは、の変数を同じのアドレスにすることができます。なぜなら、それらのプロセスはすべて仮想アドレスだからです。

一般的に、最近のデスクトップクラスのシステムでは、個々の変数のアドレスはしばしば奇数ではありませんが、それは起こる可能性があります。

いいえ、スタックにインデックスを作成していません。すべてのアドレスは通常同じように見えますが、スタックは違いはありません。スタック上のものには別のアドレス空間はありません。スタックは他のメモリと同じようにメモリ内のものです。

「ギガバイトに変換する」という意味が理解できません。

+0

仮想化について言えば、2つのプロセスで1つの変数が使用され、プロセスごとに異なるアドレス値が使用されますが、メモリ内で同じであることを意味しますか?私はメモリ自体にスタックの嘘を知っているが、私が意味したのは、もし私が印刷されたアドレスの 'バイト値 'を変換することができたならば、それは常にメインメモリの使用バイト以下でなければならない。実際のアドレスそのものではなく、実際のアドレスそのものではありません。 – Kameshwaran

+0

いいえ、反対の方向です。プロセスは(一般的に)メモリを共有しないので、変数は物理メモリ内の異なる場所にあります。しかし変数の仮想アドレスは同じであるかもしれません。なぜなら仮想アドレスはメモリ内に単独であるかのように各プロセスを見ているからです。そして、いいえ、アドレスが0から割り当てられるという保証はないので、そのようなアドレスを解釈することはできません。仮想アドレスの場合、ランダム化が頻繁に行われるため、さらに不透明になります。 – unwind

関連する問題