【发布时间】:2010-06-28 17:45:46
【问题描述】:
我正在编写一个编译器,这个编译器的一个特点是它会自动为值类型生成 GetHashCode()、Equals(object) 和 Equals({this value type}) 方法。现在 Equals({this value type}) 实现基本上生成的 il 与这个 c# 生成的 il 等效:
public bool Equals(ThisType o)
{
return Field1 == o.Field1 && Field2 == o.Field2 && Field3 == o.Field3;//etc
}
我的编译器将所有这些对象推入堆栈,然后开始比较它们并将它们“和”在一起。这会导致方法的 .maxstack 很快变大。有这个惩罚吗?如果是这样,我应该在什么时候开始将值推送给本地人?
谢谢。
【问题讨论】:
标签: performance compiler-construction clr cil