0

静的変数へのメモリ割り当ては、コンパイル時に行われます。

  1. アプリケーションを何度もコンパイルすると、毎回メモリが割り当てられますか?
  2. もしそうなら、その時までに、それは私のコンピュータの完全なメモリを消費するかもしれません. 実際には、それは決して起こりません。
  3. また、他のコンピューターで同じアプリケーションの実行可能ファイルを実行すると、正常に実行されます。他のコンピューターでコンパイルされた場合、他のコンピューターのメモリで静的変数を見つける方法。
  4. また、同じアプリケーションの多くのインスタンスを起動すると、すべてのインスタンスに対して静的変数のコピーが作成されますか、それとも単一の静的変数がすべてのインスタンスで共有されますか? コピーが作成されると思います。しかし、ここでは、メモリがコンパイル時に割り当てられ、アプリケーションの 1 つのインスタンスがそのメモリを使用できるのではないかと疑っています。そのため、他のインスタンスがその静的変数にどのようにメモリを割り当てるかということです。

    全体として、「コンパイル時のメモリ割り当て」とは実際にはどういう意味ですか?

4

1 に答える 1

0

「コンパイル時のメモリ割り当て」というステートメントを誤解しています。これが意味することは、コンパイラが生成するバイナリにデータを書き込むことです。これは、プログラムがオペレーティング システムによってロードされるときにメモリを確保する必要があることを示します。

特に、フィールドは通常、BSSと呼ばれる出力ファイルのセクションに格納されます。コンパイラは静的変数宣言を BSS に配置し、OS のプログラム ローダーはプログラムのロード時に BSS セクションを読み取り、新しく作成されたプロセスに十分なメモリを確保して BSS を格納します。

プログラムが起動されるたび、つまり新しいプロセスが作成されるたびに、そのプロセス用に新しいメモリが確保されます。これには、BSS 別名静的変数に必要なメモリが含まれます。

于 2014-08-09T05:43:03.393 に答える