web-dev-qa-db-ja.com

C ++のグローバル変数はスタック、ヒープ、またはどちらにも保存されませんか?

私は火曜日に試験を受けていますが、この質問は私の先生が彼のテキストでよく尋ねる質問です。

グローバル変数はデータメモリに保存されているため、最初は正しい答えは「どれも」でなければならないと確信していました。 C++標準に従って、グローバル変数はヒープに格納されることを明確に述べています。今、私はかなり混乱していて、尋ねられた質問に対する正しい答えが何であるかを本当に理解することができません。

グローバル変数がヒープに格納されるのはなぜですか?私は何が欠けていますか?

前もって感謝します。

編集: 本へのリンク -231ページ

18

205ページにある本の内容は次のとおりです。

オペレーティングシステムアーキテクチャに精通している場合、ローカル変数と関数引数はスタックに格納され、グローバル変数と静的変数はヒープに格納されることに興味があるかもしれません。

これは間違いなく本の間違いです。最初に、C++標準のように、ストレージ期間についてストレージについて説明する必要があります。「スタック」は自動ストレージ期間を指し、「ヒープ」は動的ストレージ期間を指します。 「スタック」と「ヒープ」はどちらも割り当て戦略であり、通常、それぞれのストレージ期間でオブジェクトを実装するために使用されます。

グローバル変数には静的な保存期間があります。それらは、「ヒープ」と「スタック」の両方とは別の領域に格納されます。通常、グローバル定数オブジェクトは「コード」セグメントに格納され、非定数グローバルオブジェクトは「データ」セグメントに格納されます。

31
dasblinkenlight