sha*_*oth 8 .net c# performance portability unchecked
我想实现一个快速哈希函数,它将使用int
数据类型并依赖于整数溢出.MSDN说,为了保证溢出不会触发异常,我必须unchecked
为该代码使用块.
假设我只在unchecked
块中包围该计算.我的代码会因此而出现任何性能或可移植性问题吗?
选中只添加一条进程指令:
checked
{
int y = x * x;
05297978 mov eax,dword ptr [ebp-10h]
0529797B imul eax,dword ptr [ebp-10h]
0529797F jno 05297986 //if not overflow: goto 05297986
05297981 call 72A29522 //invoke exception
05297986 mov dword ptr [ebp-14h],eax
}
unchecked
{
int yy = xx * xx;
0529799E mov eax,dword ptr [ebp-18h]
052979A1 imul eax,dword ptr [ebp-18h]
052979A5 mov dword ptr [ebp-1Ch],eax
}
Run Code Online (Sandbox Code Playgroud)
作为一项规则,你可以期望未经检查的算术稍微快一点,但它几乎不值得向你提出相反的问题(即"将使用检查会伤害我的表现吗?").
checked和unchecked仅仅意味着有略微不同的规则如何像运营商+
,*
以及-
被处理,你应该使用一个适合在手的情况下.
在这种情况下,您肯定希望取消选中,因此您应该在代码中说明这一点.这实际上增加了可移植性,因为无论编译器开关如何使用它都将具有相同的行为.