ヒープとスタック オブジェクトの作成: より詳しく
C では、オブジェクトの作成はスタックベースまたはヒープのいずれかに分類できます。に基づいています。これら 2 種類の作成の構文は若干異なりますが、基礎となるメモリ管理原則を理解することが重要です。
スタックベース オブジェクト
提供されているコード スニペット、Object o; は、関数のスタックにオブジェクトを割り当てます。自動ストレージ期間を使用すると、これらのオブジェクトは関数の実行中にスタック上に存在し、関数が返されるときに破棄されます。ポインタ o はスタック上のオブジェクトのアドレスを格納します。
ヒープベースのオブジェクト
ヒープベースのオブジェクトの場合、コードは通常次のパターンに従います。 Object*ああ; o = 新しいオブジェクト();。 1 行目ではポインタ o がスタック上に割り当てられ、2 行目では new 演算子を使用して実際のオブジェクトがヒープ上に作成されます。ポインタ o は、ヒープに割り当てられたオブジェクトを指すようになります。
スタックとヒープを超えて
スタックとヒープの概念は、明示的に定義されていないことに注意することが重要です。 C規格。代わりに、標準では、自動、動的、静的、またはスレッドローカルのストレージ期間の概念が導入されています。
自動ストレージは一般にスタック上に実装され、ローカル変数と特定の種類のオブジェクトに使用されます。 。一方、静的ストレージは通常、スタックやヒープに関連付けられず、別のメモリ領域に存在します。メンバー変数は、所属するオブジェクトの保存期間を継承します。
説明例
次のコードを考えてみましょう。
struct Foo { Object o; }; Foo foo; int main() { Foo f; Foo* p = new Foo; Foo* pf = &f; }
ポインタ変数 p と pf はスタックに保存されますが、それらが指すオブジェクトの保存期間は異なります。
結論として、C でのオブジェクトの作成を理解することは、それ以上のものです。スタックとヒープという単純な二分法です。ストレージ期間を理解し、オブジェクトが定義されているコンテキストを考慮することで、開発者はメモリ割り当てを効果的に管理し、潜在的なメモリ関連の問題を回避できます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3