0

コール スタックと関数のスタック フレームのスタックを格納する 2 つの異なるメモリ位置をネイティブにサポートするハードウェア プラットフォームはありますか? まず、おそらくユーザー コードの読み取りと書き込みを保護します。従来の構造化言語 (つまり、C/C++) 用に設計されたハードウェア プラットフォームに特に関心がありますが、エキゾチックではありません。

4

1 に答える 1

0

これは、非常にリソースの少ないマイクロコントローラーの一般的なセットアップです。

この取り決めの動機は、通常、次のいずれかまたは両方です。

1) コア速度で動作するオンダイ SRAM は限られた量 (多くの場合 1 または 2 kB) ですが、メモリを追加するとアクセス時間が遅くなります - 1kB は、リターン アドレスのいくつかのスレッド スタックには十分な大きさですが、大規模な自動ではありません。スタックに格納された変数。2) セグメント内メモリアクセス命令がより短いオペコードでエンコードされるため、RAM からより速くフェッチされるセグメント化されたアドレス指定モード。

この配置により、関数呼び出しと戻り値の単純なケースが安価になります。

実際には、多くの CPU アーキテクチャ (特に RISC アーキテクチャ) では、コンパイラは汎用メモリ アクセス命令を使用してスタック フレームを作成および使用するため、スタック フレームがどこにあり、どのように使用されるかは、コンパイラの作成者が決定します。 CPUアーキテクトではなく。

この質問であなたが念頭に置いているのは、スタック フレーム内の他のデータによる上書きからリターン アドレスを保護することだと思いますか?

于 2013-02-15T01:12:39.233 に答える