4

C++ では、プログラマーは、スタック割り当てメモリまたはヒープ上の動的メモリのいずれかを使用できます。スタックがどのように動作するかについてはかなり明確です (C++ の演習としてスタックを作成しました) が、「スタック」がどのように、どこで定義されているかについてはまだ興味があります。

「スタック」は言語の機能ですか、OSの機能ですか、それともハードウェアの機能ですか? オペレーティング システムの観点から見ると、各スタックは多くのアクティブなスレッド プロセスのそれぞれに関連するものであるという漠然とした考えがあります。これは、CPUやマザーボードのハードウェア機能ではなく、ソフトウェアレベルで実装されていることを示唆しています。

C++ の場合、コンパイラは各バイナリにスタックの実装を挿入した可能性があると思います。それとも、OS が独自のスタック実装を実行中の各プロセスに適用するのでしょうか? これはどのように定義されましたか?

ここで同様の質問を見つけましたが、回答が得られていないため、質問をより直接的に再度述べたいと考えています。

4

2 に答える 2

2

「「スタック」は言語の機能ですか、OSの機能ですか、それともハードウェアの機能ですか?」

それは実際にはハードウェアの機能です。ほとんどの CPU は、命令に使用されるスタック ポインタ レジスタの機能を提供しますcall。メモリのどの部分を予約する必要があるかは、実際には OS (ベアメタル) の実装に依存します。

于 2015-03-28T19:46:26.617 に答える
1

スタックは、オペレーティング システムによって管理されるハードウェアの機能です。特定の命令 (プロシージャー呼び出しなど) は、スタックに影響を与えます。コンテキスト スイッチとプロセッサ モード スイッチのハードウェア サポートがあります。

オペレーティング システムは、スタック自体を管理します。OS がスタックを割り当てます。通常、プロセスごと、およびプロセッサ モードごとに個別のスタックがあります。

スタックは通常下向きに成長します。スタックに値を追加するハードウェア命令は、通常、スタック ポイント レジスタをデクリメントします。仮想メモリ システムは通常、ユーザー スタックをユーザー アドレス空間の最上位に配置します。

于 2015-03-28T19:47:00.790 に答える