ホームページ > バックエンド開発 > C++ > C では静的変数とグローバル変数はどのように初期化されるのでしょうか?

C では静的変数とグローバル変数はどのように初期化されるのでしょうか?

DDD
リリース: 2024-11-08 07:05:02
オリジナル
1096 人が閲覧しました

How are Static and Global Variables Initialized in C  ?

C での静的変数とグローバル変数の初期化

C では、名前空間スコープを持つ静的オブジェクトとグローバル オブジェクトは C とは異なる方法で初期化されます。包括的な説明:

初期化フェーズ:

C はこれらの変数を 3 つのフェーズで初期化します:

  1. ゼロ初期化: すべての静的オブジェクトが設定されます
  2. 静的初期化: 静的初期化子を持つオブジェクトが初期化されます。
  3. 動的初期化: 初期化にコードの実行が必要なオブジェクト (非静的オブジェクト) が初期化されます。

指定された変数の初期化:

コード スニペット内:

  • global_int1 は静的初期化中に 5 に初期化されます。
  • global_int2 はゼロ初期化中にゼロ初期化されます。
  • static_int1 は静的初期化中に 4 に初期化されます。
  • static_int2 はゼロ初期化中にゼロ初期化されます。

ストレージおよび初期化値の管理:

コンパイル中、初期化値は、const でない限り、実行可能ファイルの「データ」セグメントに格納されます。その場合、それらは「テキスト」セグメントに配置されます。

システムは「データ」セグメントをメモリにロードし、静的初期化子を使用して静的変数を初期化します。イニシャライザのない変数または動的イニシャライザは「bss」セグメントに配置され、コードの実行前にシステムによってゼロに設定されます。

C 11 の追加メモ

C 11 では constexpr が導入され、一部のユーザー定義関数を静的初期化できるようになりました。スレッド ローカル変数も導入され、初期化手順がさらに複雑になります。

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

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