2016-06-29 12 views
0

私はコンピュータプログラミングを初めて利用しています。私は変数について勉強していて、インターネット上の定義を見つけました。Cプログラムに格納されている変数はどこですか?

変数は、コンピュータプログラムに値を格納するために使用されるコンピュータのメモリ位置に付けた名前です。

これらのメモリの場所は何ですか?これらの場所は実際のコンピュータのメモリを参照していますか?これは後で必要なときにそれらの変数を呼び出す場所からプログラム自体のダンプに過ぎませんか? ヒープとスタックのようなスタックオーバーフローに関してここで遭遇した他の用語もあります。私はこれらの周りに私の頭を得ることができませんでした。助けてください。

+1

変数のストレージクラスによって異なります。 –

+0

また、変数を定義する場所によっても異なります。そして、もしそれらが定義で初期化されているのであれば、そうでないかもしれません。 –

+1

ヒープ&スタックの詳細はこちらhttp://stackoverflow.com/questions/79923/what-and-where-are-the-stack-and-heap – CIsForCookies

答えて

0

あなたが質問したやり方は、あなたが1つの答えを期待することを示唆しています。それは単にそうではありません。

大まかに言えば、プログラム実行中にすべての変数がメモリに存在します。変数が存在するメモリは、いくつかの点で異なります。

現代のコンピュータハードウェアは、複数レベルのキャッシュ(CPUと各種周辺デバイスの両方)、多数のCPUレジスタ、共有メモリ、異なるタイプのRAM、ストレージデバイス、 EEPROMなどである。異なるシステムは、これらの種類のメモリを有し、より多くの種類のメモリを異なる比率で有する。

オペレーティングシステムによって、プログラムでさまざまな方法でメモリを使用できる場合があります。たとえば、RAMと予約されたハードドライブスペースの組み合わせを使用して仮想メモリを提供したり、マッピングを管理したりすることで、プログラムがその違いを認識することはありません。これにより、オペレーティングシステムがプログラムのメモリ使用量をRAMとハードドライブの間でスワップする必要があるため(通常は桁違いに遅いため)、RAMとして物理的に使用可能なメモリよりも多くのメモリを使用できますが、パフォーマンスにも影響します。

多くのコンパイラとライブラリは、プログラムのパフォーマンスを最大限に引き出すために実装されています(さまざまな方法で) - コードのコンパイラの最適化(プログラムの実行時にコード内にいくつかの変数が存在する可能性があります)パフォーマンスのために作られています。これの結果として、コンパイラまたはライブラリは、メモリをさまざまな方法で使用することができます(たとえば、プログラムの実行時に使用可能なメモリリソースを検出する実行可能コードを実装するものもあれば、固定量のRAM)、使用状況は時間とともに変化することさえあります。

+0

ほとんどの最新のコンピュータには、キャッシュも、余分なRAMもありません。ほとんどのコモータには、RAM /フラッシュが非常に限られたMCUがあります。彼らは何十年もの間、完全に成長しているOSを搭載したコンピュータを上回っています。 – Olaf

関連する問題