C および C の静的変数とグローバル変数の初期化プロセスとは何ですか?

DDD
リリース: 2024-11-05 20:22:02
オリジナル
1046 人が閲覧しました

What is the Initialization Process for Static and Global Variables in C and C  ?

C および C で静的変数とグローバル変数はいつ初期化されますか?

C および C では、静的変数とグローバル変数には個別の初期化手順があります。 main 関数の前に静的オブジェクトとグローバル オブジェクトが構築される C とは異なり、C にはそのような初期化がありません。

C での初期化タイミング

C コードでは、次のようなグローバル変数が使用されます。 global_int1 と global_int2 には明示的な初期化子がなく、システムによって 0 に初期化されます。ただし、静的変数 static_int1 および static_int2 は初期化されません。これらの値は、プログラム内で明示的に設定されるまで不定のままです。

C の初期化値

値が 5 の global_int1 など、明示的な初期化子を持つ変数には、その値が割り当てられます。コードの変換の一部としてコンパイラによって行われます。この値は、実行可能ファイルのデータ セグメントに保存されます。

プログラムの実行時に、システムはデータ セグメントを含む実行可能ファイルをメモリにロードします。その後、グローバル変数にメモリが割り当てられ、データ セグメントに格納されている値で初期化されます。

C の初期化フェーズ

C は、静的変数の 3 フェーズの初期化プロセスに従います。名前空間スコープを持つオブジェクト:

  1. ゼロ初期化: すべての静的オブジェクトは最初に 0 に設定されます。
  2. 静的初期化: 静的オブジェクト
  3. 動的初期化: 動的初期化を持つオブジェクト (例えば、 C で初期化されていない場合は static_int2 または global_int2 ) は、コード実行を通じて実行時に初期化されます。

C でのメモリ管理

C の静的初期化値は、実行可能ファイルのデータ セグメントに格納されます。 C と同様に、これらの値はプログラムの実行中にメモリにロードされ、それぞれの変数に割り当てられます。

初期化子を持たない変数、または動的初期化を伴う変数は、bss セグメントにメモリが割り当てられます。システムはプログラムの実行前にこれらの変数を 0 に初期化します。

以上がC および C の静的変数とグローバル変数の初期化プロセスとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート