10

RISCやARMなどのプロセッサのCのスタックとアセンブラのスタックの違いは何ですか?

教授は、注意してください、スタックは、他の科目で学んだスタックとは異なります (アルゴリズムと構造、C について学ぶ)

私が思い出す限り、どちらもメモリに保存された単なるデータであり、どちらも LastInFirstOut スキームで機能し、使用後にクリーンアップする必要があります。

つまり、それらは 2 つの異なる「世界」にあるため、同じにすることはできませんが、異なる重要な何かが欠けているのでしょうか? たぶんそれだけですが、それ以来ずっと私を悩ませてきました。

ありがとうございました

4

3 に答える 3

2

自動変数にスタック モデルではなくオーバーレイモデルを使用するコンパイラを見てきました。言語は自動変数の割り当てと割り当て解除をスタックとして提示しますが、基礎となる実装はそうである必要はありません。

一部のコンパイラでは C スタックが存在しますが、ハードウェア スタックとは別になっています。

次に、 register-windows のような概念があります。

リストは続きますが、これらのいずれかがあなたの教授が考えていたものであるとは保証できませんし、私が正しい方向に進んでいるとさえ言えません. 確実に答えられる人はただ一人。

これらのバリエーションのほとんどは、概念的にはスタックとほぼ一致していますが、両方の言語を使用している場合は、実装の詳細に注意する必要があります。

于 2013-08-12T10:50:18.197 に答える
1

概念スタックと x86 スタック (およびおそらく他のアーキテクチャ) の違いの 1 つは、スタックが成長する方向です。(アーキテクチャによっては) スタックが実際にメモリ内でに成長する可能性がある場合、スタックを「上に」成長するように教えるのが一般的です。

于 2013-08-12T11:37:11.193 に答える