Chr*_*vic 5 .net clr stack types cil
尝试使用ildasm深入研究CIL代码,很明显CIL本身就是基于堆栈来支持像这样的表达式
IL_0001: ldc.i4.s 13 ; 1f 0d
IL_0003: stloc.0 ; 0a
IL_0004: ldc.i4.s 31 ; 1f 1f
IL_0006: stloc.1 ; 0b
IL_0007: ldloc.0 ; 06
IL_0008: ldloc.1 ; 07
IL_0009: add ; 58
Run Code Online (Sandbox Code Playgroud)
做同样float32
而不是int32
使用ldc.r4 <num>
它在调用方面没有区别add
因此让我想知道是否存在针对不同类型的不同堆栈或者如果只有一个堆栈保存特定元素在堆栈上具有的类型的元数据.是否有关于ECMA-335或其他地方的具体实施的信息?
JIT推断出类型.无论如何,它必须这样做以打字检查你的程序.无需为其操作的类型参数化操作.堆栈的类型和大小可在IL指令序列中的任何位置计算.如果它们不可计算或模糊不清,则该程序无法验证.
我相信Java IL的做法有所不同,但我可能会弄错.