如何使用ILGenerator设置.maxstack指令?
例如,典型的setter方法的.maxstack为2:
.maxstack 2 // The evaluation stack has a max size of 2
IL_0000: ldarg.0 // the current instance (this)
IL_0001: ldarg.1 // new value
IL_0002: stfld Int32 _someField // stores the new value on _someField
IL_0007: ret // Return to caller
可以使用
ILGenerator
设置元数据,因为它实际上提供了DefineLabel和DeclareLocal,那么为什么不提供SetMaxStack(short/int)
方法或类似的方法呢?如果无法设置此元数据,
Reflecion.Emit
如何确定堆栈的大小?是否将其设置为最大可能值?还是堆栈在运行时自动扩展? 最佳答案
ILGenerator
类将跟踪堆栈大小。看看reference source。例如,涉及到UpdateStackSize函数。