哪个通常更快,一个If分支或一个20字节的赋值?

时间:2013-07-20 16:55:50

标签: c# performance optimization

如果我正在优化性能,并且我可以选择使用一个简单的If语句,它使用布尔变量来表示它的条件,或者我可以选择将20个字节的数据从一个结构传输到一个更大的结构,通常会最快?

我不知道哪一个更快,但是如果你认为它足够接近计算机中的分支预测器将发挥作用,你会说如果布尔值是随机的,那么if分支会更慢,如果大部分时间它都是某种模式,if分支比传输字节要快吗?

编辑:

我理解这是特定于上下文的,如果这只是执行一次就无所谓了。但是,请一般回答这个问题。如果你有一个循环,你会期望更快吗?显然,字节传输将使用同时存在于主存储器中的结构。

1 个答案:

答案 0 :(得分:4)

嗯,这取决于。分支错误预测的成本在12到25个时钟周期之间,具体取决于处理器类型。

来自L1缓存的内存访问需要2或3个周期,用于4或8个字节。但是它有一个很长的痛苦的尾巴,这快速上升到L2和L3,如果数据没有出现在任何缓存中,那么处理器可以停止数百个的周期等待RAM。它存在的可能性在很大程度上取决于内存访问模式。

所以你不知道。你真的必须描述你的代码。