C-关于循环展开对性能的影响?
uint32 sum = 0;
uint32 i= 0;
//@code 1
for (i=0; i<66666; ++i)
{
sum += p[a];
}
//@code 2
for (i=0; i<66666; i+=2)
{
sum += p[a];
sum += p[a+1];
}
//@code 3
for (i=0; i<66666; i+=4)
{
sum += p[a];
sum += p[a+1];
sum += p[a+2];
sum += p[a+3];
}
sum += p[a];
sum += p[a+1];
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果只是实现switch-case 非常规用法拾零 (1. 绝无原创 2. 非常重视代码规范者勿入)的效果,下面的实现也可以的:
但是循环体内还是要对深度做直接操作。
有个switch-case的技巧:
switch-case 非常规用法拾零 (1. 绝无原创 2. 非常重视代码规范者勿入)
循环展开优化是有效果的
实际优化结果结果依赖于编译器以及编译模式
循环展开优化效果还要依赖于硬件,cache大小等对大循环影响很大,在不超过cache大小的情况下循环展开越深优化越大,有必要展开。但是一旦超过cache大小,频繁的cpu切换却会显著降低性能
根据循环次数自动的完成循环展开这个可以尝试用C++的模板类实现,C的就不了解了
循环展开的深度需要考虑循环次数