C# から IL (CIL/MSIL など) にコードを変換しています。次の利用可能な空き場所に保存できるようにしたいので、条件付きで立ち往生しています。例:
var x = 0;
if(x > 20)
x = 1;
Console.WriteLine(x);
これを正しい IL と思われるものに変換すると、次のようになります。
IL_0001: ldc.i4.0
IL_0002: stloc.0
IL_0003: ldloc.0
IL_0004: ldc.i4.s 14
IL_0006: cgt
IL_0008: ldc.i4.0
IL_0009: ceq
IL_000B: stloc.1
IL_000C: ldloc.1
IL_000D: brtrue.s IL_0011
IL_000F: ldc.i4.1
IL_0010: stloc.0
IL_0011: ldloc.0
IL_0012: call System.Console.WriteLine
これは正しい IL だと思いますが、私の例は非常に静的です。IL コードで見ると、ceq の結果が loc.1 に格納されます。
したがって、私の問題です-コンパイラは、loc.0がすでに取得されていることを確認し(変数「x」)、次の空き場所である1を使用しました。私の目標は、特定のメソッドがN変数を持つことができる場所でこれを動的に行うことです条件の前。
最後に、ここに私の質問があります。C# から、"stloc. nextAvailable " と言うオペコードを発行するにはどうすればよいですか? それは同等の負荷ですか?