コール スタックと関数のスタック フレームのスタックを格納する 2 つの異なるメモリ位置をネイティブにサポートするハードウェア プラットフォームはありますか? まず、おそらくユーザー コードの読み取りと書き込みを保護します。従来の構造化言語 (つまり、C/C++) 用に設計されたハードウェア プラットフォームに特に関心がありますが、エキゾチックではありません。
1 に答える
0
これは、非常にリソースの少ないマイクロコントローラーの一般的なセットアップです。
この取り決めの動機は、通常、次のいずれかまたは両方です。
1) コア速度で動作するオンダイ SRAM は限られた量 (多くの場合 1 または 2 kB) ですが、メモリを追加するとアクセス時間が遅くなります - 1kB は、リターン アドレスのいくつかのスレッド スタックには十分な大きさですが、大規模な自動ではありません。スタックに格納された変数。2) セグメント内メモリアクセス命令がより短いオペコードでエンコードされるため、RAM からより速くフェッチされるセグメント化されたアドレス指定モード。
この配置により、関数呼び出しと戻り値の単純なケースが安価になります。
実際には、多くの CPU アーキテクチャ (特に RISC アーキテクチャ) では、コンパイラは汎用メモリ アクセス命令を使用してスタック フレームを作成および使用するため、スタック フレームがどこにあり、どのように使用されるかは、コンパイラの作成者が決定します。 CPUアーキテクトではなく。
この質問であなたが念頭に置いているのは、スタック フレーム内の他のデータによる上書きからリターン アドレスを保護することだと思いますか?
于 2013-02-15T01:12:39.233 に答える