我写了一段代码:
#include <cstddef>
const size_t array_length = 1024*1024*256;
int main()
{
auto arr = new char[array_length];
#ifdef NO_EXPEND
for(size_t i = 0; i<array_length; i ++){
arr[i] = 0;
}
for(size_t i = 0; i<array_length; i ++){
arr[i] = arr[i] + 1;
}
#else
for(size_t i = 0; i<array_length; i = i+8){
arr[i] = 0;
arr[i + 1] = 0;
arr[i + 2] = 0;
arr[i + 3] = 0;
arr[i + 4] = 0;
arr[i + 5] = 0;
arr[i + 6] = 0;
arr[i + 7] = 0;
}
for(size_t i = 0; i<array_length; i = i + 8){
arr[i] = arr[i] + 1;
arr[i + 1] = arr[i + 1] + 1;
arr[i + 2] = arr[i + 2] + 1;
arr[i + 3] = arr[i + 3] + 1;
arr[i + 4] = arr[i + 4] + 1;
arr[i + 5] = arr[i + 5] + 1;
arr[i + 6] = arr[i + 6] + 1;
arr[i + 7] = arr[i + 7] + 1;
}
#endif
delete [] arr;
return 0;
}
运行结果如下:
![](https://img.haomeiwen.com/i8383510/a7b3731ef7014a6b.png)
我们可以看到,在for
循环展开可以提高代码的执行效率,主要的原因有以下两点
1、提高缓存命中(cache hit)率
2、减少分支预测,当前例子下,也可以简单的理解为条件判断减少。
网友评论