オペランドスタック
(operand stack から転送)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/12/04 13:38 UTC 版)
|
|
この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。 (2025年12月)
|
オペランドスタック(英: operand stack)とは、スタックマシンなどの仮想マシンが使用するオペランド用のスタックで、メモリ内の領域の1つ。スタックマシンでは、コールスタックと区別して、オペコードを実行する際にオペランド用に使用するスタックを用意する場合があり、これをオペランドスタックと呼ぶ。
Java仮想マシン
Java仮想マシンでは、コールスタックとして、オペランドスタックとは別の、スレッドごとに作られるJava仮想マシンスタック(英: Java Virtual Machine stack)に、フレーム(英: frame)と呼ばれる小分けされた領域がある[1]。オペランドスタックは、そのフレーム内の領域の種類の1つである。スタックの一種である。[2]
オペランドスタックはJava仮想マシンの機械語の命令(オペコード)から直接使用される。Java仮想マシンはスタックマシンであり、レジスタが無いため、オペランドスタックを作業領域に使って計算などを実行する。例えば、ローカル変数のintの値を2つiload命令でオペランドスタックにプッシュし、iadd命令でその2つをポップし、加算し、プッシュする、というような使い方がされる。
オペランドスタック1つの領域サイズは32ビットで、long型とdouble型だけは2つ分のサイズ(64ビット)を使用する。
Javaクラスファイルのロード時チェックにより、オペランドスタックに積まれた時の型以外の使用をすること(floatでプッシュした値をintとして使用するなど)は一部の命令を除き禁止されている。
.NET
.NETの共通中間言語ではオペランドスタックの事を評価スタック(英: evaluation stack)と呼んでいる[3]。
Python仮想マシン
Python仮想マシンではオペランドスタックの事をインタープリタスタック(英: interpreter stack)と呼んでいる[4]。
関連項目
脚注
- ^ “2.5.2. Java Virtual Machine Stacks - Chapter 2. The Structure of the Java Virtual Machine”. docs.oracle.com. 2024年3月26日閲覧。
- ^ “2.6.2. Operand Stacks - Chapter 2. The Structure of the Java Virtual Machine”. docs.oracle.com. 2024年3月26日閲覧。
- ^ “ECMA-335 - Ecma International”. Ecma International. 2024年3月26日閲覧。
- ^ “dis --- Python バイトコードの逆アセンブラ”. Python documentation. 2024年3月26日閲覧。
- オペランドスタックのページへのリンク