ここSOでもインターネットでも同様の質問/回答を見つけることができません。この質問と同じくらい役に立たないのは、MSILを読んでいるときに頭に浮かんだ質問かもしれません。これが実際的な質問でなくても、私のシナリオで IL 操作の実行がどのように機能するかを理解したいと思っています。
前提:
MSIL コマンドと関数の実行は、次の 3 つの手順で行われることに注意してください。
- コマンド オペランドまたは関数パラメーターをスタックにプッシュします。
- MSIL コマンドを実行するか、関数を呼び出します。コマンドまたは関数は、スタックからオペランド (パラメーター) をポップし、スタックの結果 (戻り値) にプッシュします。
- スタックから結果を読み取ります。
ステップ 1 と 3 はオプションです。たとえば、void 関数は戻り値をスタックにプッシュしません。
どのくらいの「処理能力」が必要かを決定するのはメソッドの機能であることは理解していますが、好奇心のために、次の 2 つの非常に基本的なメソッドを考えてみましょう。
最初の方法:
void Method1()
{
var result = 1+1;
}
2 番目の方法:
int Method2()
{
var result = 1+1;
return result;
}
質問:
void メソッドは戻り値をプッシュしない (または暗黙的な戻り値がある) ため、これは、2 番目のメソッドとは対照的に、実行時に必要なオーバーヘッドが少ないことを意味しますか?