ホームページ >バックエンド開発 >C++ >オブジェクトへの参照は、スタック上とヒープ上で作成された場合、どこに保存されますか?

オブジェクトへの参照は、スタック上とヒープ上で作成された場合、どこに保存されますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-27 01:52:13994ブラウズ

Where are References to Objects Stored when Created on the Stack vs. the Heap?

スタックまたはヒープでのオブジェクトの作成:

疑問が生じます: スタックまたはヒープでオブジェクトを作成する場合、参照はどこにあるのか

C では、オブジェクトのストレージはそのコンテキスト、つまりストレージによって決まります。期間:

オブジェクト o は次のオブジェクトを作成します:

  • 自動ストレージ: 関数内でローカルに宣言された場合、オブジェクトはスタック.
  • 静的storage: ネームスペースまたはファイル スコープで宣言された場合、オブジェクトはスタックまたはヒープの外側の専用メモリ領域に配置されます。
  • メンバー変数: If別のオブジェクト内のサブオブジェクトとして宣言された場合、それを含むオブジェクトのストレージを継承します。 duration.

Object* o は、自動ストレージを備えたポインターを作成します。

ポインターは、他のオブジェクトと同様にスタック上に割り当てられます。ストレージ期間は、初期化式ではなく、コンテキストによって決まります。

たとえば、以下のコード部分では、

struct Foo {
    Object o;
};

Foo foo, f;
Foo* p = new Foo;
Foo* pf = &f;
  • foo.o には静的ストレージがあり、どちらもありません。 foo 自体が静的ストレージを持っているため、スタックにもヒープにもありません。
  • f.o は自動ストレージを持ち、f としてスタック上に常駐します。自動ストレージがあります。
  • p->o は、*p と同様にヒープ上に動的ストレージがあります。
  • pf->o と f.o は、pf により同じオブジェクトを参照します。 f を直接指します。

要約すると、オブジェクトの保存場所はそのコンテキストにのみ依存しますが、ポインタは常にスタック上に割り当てられますが、さまざまな保存期間の参照オブジェクト。

以上がオブジェクトへの参照は、スタック上とヒープ上で作成された場合、どこに保存されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。