ホームページ  >  記事  >  バックエンド開発  >  オブジェクトはメモリ内のどこに存在しますか?スタック、ヒープ、またはその他の場所?

オブジェクトはメモリ内のどこに存在しますか?スタック、ヒープ、またはその他の場所?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-14 19:05:02672ブラウズ

Where Do Objects Reside in Memory: Stack, Heap, or Somewhere Else?

スタックとヒープのオブジェクト作成

この質問では、スタックまたはヒープでのオブジェクトの作成に関する懸念が生じます。提供されているコード (Object o:) はスタック上でのオブジェクトの作成を暗示していますが、スタックやヒープについては明示的に言及していません。この違いを明確にしましょう。

C では、メモリ内のオブジェクトの位置は、具体的にはスタックやヒープではなく、その記憶期間によって決まります。ストレージ期間には、自動、動的、静的、スレッドローカルの 4 つがあります。自動ストレージは主にコール スタック上のローカル変数に使用され、動的ストレージは「new」でヒープに割り当てられたオブジェクトに使用されます。

  • スタック: 自動ストレージ、通常はローカル変数用に予約されています。
  • ヒープ: で作成されたオブジェクトに使用される動的ストレージ'new'.
  • 静的メモリ: 静的 (またはスレッドローカル) オブジェクトはスタックにもヒープにも存在せず、通常は別の領域に存在します。

オブジェクトの作成

  • オブジェクト o; // 自動ストレージ付きローカル変数 (スタック)
  • Object o = Object(); // 動的ストレージ (ヒープ)
  • Object* o; // 自動ストレージを持つオブジェクトへのポインタ (スタック)
  • Object* o = new Object(); // 動的ストレージ (ヒープ) を持つオブジェクトへのポインター

コンテキストとストレージ期間

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

  • foo.o: 静的に割り当てられたオブジェクト (スタックでもヒープでもない) のメンバー変数
  • f.o: Memberローカルに割り当てられたオブジェクト内の変数(スタック)
  • p->o: 動的に割り当てられたオブジェクトのメンバー変数 (ヒープ)

ポインターとストレージ

ポインタ自体はオブジェクトであり、同じ記憶規則に従います。それらのストレージは、それらが指すタイプではなく、コンテキストによって決まります。それらが指す型によって、指すオブジェクトの保存期間が決まります。

全体として、C のメモリ管理を理解するには、保存期間を理解することが重要です。オブジェクトは、保存期間とコンテキストに応じて、異なるメモリ領域に存在できます。

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

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