あなたが質問したやり方は、あなたが1つの答えを期待することを示唆しています。それは単にそうではありません。
大まかに言えば、プログラム実行中にすべての変数がメモリに存在します。変数が存在するメモリは、いくつかの点で異なります。
現代のコンピュータハードウェアは、複数レベルのキャッシュ(CPUと各種周辺デバイスの両方)、多数のCPUレジスタ、共有メモリ、異なるタイプのRAM、ストレージデバイス、 EEPROMなどである。異なるシステムは、これらの種類のメモリを有し、より多くの種類のメモリを異なる比率で有する。
オペレーティングシステムによって、プログラムでさまざまな方法でメモリを使用できる場合があります。たとえば、RAMと予約されたハードドライブスペースの組み合わせを使用して仮想メモリを提供したり、マッピングを管理したりすることで、プログラムがその違いを認識することはありません。これにより、オペレーティングシステムがプログラムのメモリ使用量をRAMとハードドライブの間でスワップする必要があるため(通常は桁違いに遅いため)、RAMとして物理的に使用可能なメモリよりも多くのメモリを使用できますが、パフォーマンスにも影響します。
多くのコンパイラとライブラリは、プログラムのパフォーマンスを最大限に引き出すために実装されています(さまざまな方法で) - コードのコンパイラの最適化(プログラムの実行時にコード内にいくつかの変数が存在する可能性があります)パフォーマンスのために作られています。これの結果として、コンパイラまたはライブラリは、メモリをさまざまな方法で使用することができます(たとえば、プログラムの実行時に使用可能なメモリリソースを検出する実行可能コードを実装するものもあれば、固定量のRAM)、使用状況は時間とともに変化することさえあります。
変数のストレージクラスによって異なります。 –
また、変数を定義する場所によっても異なります。そして、もしそれらが定義で初期化されているのであれば、そうでないかもしれません。 –
ヒープ&スタックの詳細はこちらhttp://stackoverflow.com/questions/79923/what-and-where-are-the-stack-and-heap – CIsForCookies