一位专门研究堆栈使用优化的Roslyn工程师对此进行了研究,并向我报告C#编译器生成本地变量存储的方式与JIT编译器进行注册的方式之间的交互似乎存在问题。在相应的x86代码中进行调度。结果是在本地的加载和存储上生成次优代码。
由于我们所有人都不清楚的某些原因,当JITter知道该块处于try-protected区域中时,可以避免有问题的代码生成路径。
这很奇怪。我们将与JITter团队进行跟进,看看是否可以输入错误,以便他们可以解决此问题。
另外,我们正在努力改进Roslyn的C#和VB编译器算法,以确定何时可以使本地人成为“临时”人-即只是将其压入并d出堆栈,而不是在堆栈上分配特定位置以用于激活的持续时间。我们相信JITter将能够更好地进行寄存器分配,如果我们能更好地提示何时可以使本地人“死”的话,那我们将做得更好。
感谢您引起我们的注意,并为您的怪异行为致歉。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)