1

、スコット静的オブジェクトを一般的に初期化する必要がありますか?プログラミング言語の語用論から

ことによって、オブジェクトの寿命は、一般的に、オブジェクトの領域を管理するために使用される三つの主要 ストレージ割り当てメカニズムの1つに対応する:

  1. 静的オブジェクトは絶対アドレスが与えられていますこれはプログラムの実行中も保持されます。

  2. スタックオブジェクトは、通常、サブルーチン呼び出しと返り値とともに、最後尾、最初の順序で割り当ておよび割り当て解除されます。

  3. ヒープオブジェクトは、任意の時間に割り当てられ、割り当て解除される可能性があります。より一般的な(そして高価な)ストレージ管理アルゴリズムが必要です。 例えば

、Cにおいて、静的オブジェクトは、定数式(コンパイル時に評価できる式)で初期化されなければなりません。

私はそれが他の言語の場合であるかどうか、他のどの言語でも静的オブジェクトがあるかどうかはわかりません。

通常、静的オブジェクトを初期化する必要がありますか?初期化時にコンパイル時に評価できる式で初期化する必要がありますか?

初期設定では、初心者ではなく、明示的または暗黙的(つまり、言語実装によって自動的に行われます)を意味します。 私の質問に言い換えると、一般に、静的オブジェクトはプログラムやコンパイラによって初期化されないままになることがありますか?

ありがとうございました。

+0

短い答えは「いいえ」です。しかし、おそらく、プログラムの後半で未初期化の問題を回避する必要があります。 – Serge

+0

まったく真実ではなく、 'static'変数はデフォルトで0(あるいは同等)に初期化され、'非static'変数は実際に初期化されなければなりません。そうでなければメモリスタックのガーベッジ値になります。 –

答えて

3

static変数は、明示的に初期化しない限り、自動的に "ゼロ"に初期化されます。

他の変数とは異なり、他の変数を初期化するのと同じ方法で初期化することができます。

+0

ありがとうございます。 初期設定では、私は初期設定ではなく、明示的または暗黙的のいずれかを意味します。 静的オブジェクトを初期化する必要がありますか? – Tim

+0

@Timいいえ、明示的にしない限り、 'main'が呼び出される前に自動的に"コンパイラ "によって初期化されます。 –

+0

私の質問に言い換えることができます:一般的に、静的オブジェクトは、プログラムやコンパイラによって初期化されないままになることがありますか? – Tim

関連する問題