2012-02-07 2 views
16

SOに関する多くの質問と回答に関連して、私は、スタックではなく自動ストレージに存在するとしてライフタイムが管理されているオブジェクトを参照する方が良いことを学びました。C++メモリ管理で用語「スタック」と「ヒープ」より「自動」と「動的」という用語が好まれるのはなぜですか?

また、動的に割り当てられたオブジェクトは、ヒープ上に存在するものとして参照されるのではなく、ダイナミックストレージ内に存在するものとして参照されるべきです。

自動、動的、静的な記憶域がありますが、自動スタックと動的ヒープの違いは本当に分かりません。なぜ前者が好まれますか?

スタック/ヒープの平均、またはメモリ管理の仕組みは問いません。私は、用語スタック/ヒープよりも自動/動的ストレージの方が好まれる理由を尋ねています。

+0

あなたの質問には次のような回答はありません。 http://stackoverflow.com/questions/408670/stack-static-and-heap-in-c – NPE

+1

@aixそれはしません。あるいは、少なくとも一方の用語が他方のものよりも好まれる方法、またはその違いを言わない。 –

+0

可能な複製[C++での適切なスタックとヒープの使用?](http://stackoverflow.com/questions/599308/proper-stack-and-heap-usage-in-c) – NPE

答えて

22

自動は私にオブジェクトの寿命について何かを伝えます:それは囲むスコープに自動的を拘束され、かつ自動的そのスコープが終了を破壊される、具体的という。

ダイナミックは、オブジェクトの寿命は、コンパイラによって自動的にを制御していないと表示されますが、私の直接の管理下にあります。

スタックは、容器の種類、及び共通callret命令によってサポートに関連する人気のある命令ポインタプロトコルのオーバーロード名です。一般的なスタックフレームの規則のために、Cのオブジェクトの存続期間に関する歴史的な関連付けを除いて、オブジェクトの存続期間については何も教えていません。 一部の実装では、スレッドローカルストレージはスレッドのスタックのですが、単一の機能のスコープに限定されないことに注意してください。

ヒープは、ソート済みコンテナのタイプまたはフリーストア管理システムのいずれかを示すオーバーロードされた名前です。これはで、フリーストアはすべてのシステムで利用可能ではなく、newで割り当てられたオブジェクトの存続期間については何も具体的には言いません。

+0

また知っておきたいこと:すべてのシステムが非再帰関数に「スタック」を使用するわけではありません。また、 "スタック"上に動的オブジェクトを作成することも可能です( 'boost :: variant does' this)。 –

4

自動/動的記憶用語は、これが標準で必要とされるものであるため、単純です。スタック/ヒープは実装ベースであり、理論的には別の方法で実装できます。

6

ほとんどの実装では、自動ストレージでオブジェクトを後退させるためにスタックが使用されます。これは標準では必須ではありませんが、ほとんどのCPUアーキテクチャではうまく機能します。

実装では、ダイナミックストレージ期間を使用してオブジェクトを後退させるさまざまな方法が使用されます。私はheapが現代のメモリアロケータが何を使用するのかを記述する最善の方法だとは確信していませんが、それはそのための "歴史的な"用語のようです。

したがって、自動/動的ストレージは、標準でオブジェクトのライフタイムを分類(「抽象」)するために使用する用語です。それらは、標準を記述しているようにオブジェクトを話したい場合に使用する適切な用語です。
スタックとヒープは、それらを後退させるために使用できる(「具体的な」)実装技術です。特定の実装について話している場合を除き、これらの用語の使用はあまり正確ではありません。

3

技術的に言えば、スタック/ヒープ割り当ては実装の詳細ですが、自動/動的ストレージはより一般的な用語です。標準自体は、アロケータがスタック/ヒープを使用しなければならないことを要求しません。したがって、自動/動的はより適切な用語ですが、個人的に私はその区別が過度にペタニックであると感じています。用語は「自動」と「動的」

1

スタックとヒープは、画像への実装に関連する概念を持ち込みますストレージの持続時間 "はC++標準に現れます。

用語「スタック」と「ヒープは、」記憶域期間とはほとんどを持っている標準ライブラリ(stack<>make_heap()push_heap()など)の機能を参照するために使用されています。

3

用語「静的記憶期間」、「自動記憶期間」、および「動的より一般的であるのに対し、

+0

あなたの以前の回答をdownvotingして申し訳ありません、私は質問があいまいだったことに気付きました。 +1 –

関連する問題