スタックの方向(上位メモリアドレスから下位メモリアドレスまたは下位メモリアドレスから上位メモリアドレスへ)は、マシンアーキテクチャによって異なります。 例Intel:上位メモリアドレスから下位メモリアドレス SPARC:より低いメモリアドレスから高いメモリアドレスへスタックの上位メモリアドレスと下位メモリアドレス
コードを使用してスタックメモリ割り当ての方向を変更できる方法はありますか。
ありがとうございました。
スタックの方向(上位メモリアドレスから下位メモリアドレスまたは下位メモリアドレスから上位メモリアドレスへ)は、マシンアーキテクチャによって異なります。 例Intel:上位メモリアドレスから下位メモリアドレス SPARC:より低いメモリアドレスから高いメモリアドレスへスタックの上位メモリアドレスと下位メモリアドレス
コードを使用してスタックメモリ割り当ての方向を変更できる方法はありますか。
ありがとうございました。
一般に、スタックの管理はコンパイラによって実行されます(ここでは、CまたはC++のようなものについて説明しています)。しかし、ISAは、例えば、push
とpop
命令を援助してもよい。
コンパイラが移植性のない言語拡張やこれを制御するコマンドラインオプションを提供していない限り、CまたはC++からはこれを行う方法はありません(なぜそうなるのでしょうか?あなたのプログラム/ライブラリは他のすべてのプログラム/ライブラリと互換性がありません!)
スタックはマシン命令レベルで使用されます。処理単位の動作をコードで変更することはできません。プログラムエミュレーションレベルを作成することだけができます。
一部のプロセッサには、スタックに物をプッシュし、さまざまな状況でそれらをポップする明示的な回路が含まれています。他のプロセッサには、「ビック」スタック用の回路は含まれていませんが、リターンアドレスのようなものを格納するのに使用されるハードウェアレジスタや回路は限られています。レジスタまたは回路をメモリの他の部分に割り当てる。
ハードウェアがメモリ内のスタックを明示的に操作しないプロセッサでは、プロセッサが実行するすべてのコードを制御していれば、どんなパターンでも使用できます。しかし、一般的には、プロセッサメーカーがスタックを実装することを推奨するパターンがあり、コンパイラや他の人が生成したコードは、そのような方法で実装されたスタックを使用する可能性が高いでしょう。
私は同じものを探していました。それをCコードで変更する。また、関数の引数、ローカル変数のために作成されたスタックも参照していました。 – NoName
@NoName:はい、これも私が参照しているスタックです。 –