abd*_*ahS 0 c++ arrays performance boolean sum
假设我想对一组布尔值求和:
bool arrray[LARGE_SIZE];
Run Code Online (Sandbox Code Playgroud)
下面哪一段代码速度更快?
int sum=0;
for(int i=0;i<LARGE_SIZE)
if(array[i]) sum++;
Run Code Online (Sandbox Code Playgroud)
和
int sum=0;
for(int i=0;i<LARGE_SIZE)
sum+=array[i] ;
Run Code Online (Sandbox Code Playgroud)
还有其他方法可以加快速度吗?这些代码在循环中使用,即使很小的速度差异也很重要。
始终测量。只有测量才能告诉您代码在给定上下文(给定编译器和选项、给定机器、给定负载等)中的行为方式。尽管如此,如果编译器没有优化选择,那么没有选择的代码有更好的机会获得良好的性能。
如果速度真的很重要,我也会尝试一下std::accumulate,因为它可能只是针对手头的任务进行了优化。
正如Tony D在对该问题的评论中含蓄指出的那样,算法和数据结构的选择通常比微观优化对速度的影响更大。例如,通过为每个改变值的操作更新计数,计数的检查可以是恒定时间。不幸的是,据我所知,std::bitset(对于编译时已知大小的数组)和boost::dynamic_bitset(对于动态大小的数组)都不能保证这种行为。
| 归档时间: |
|
| 查看次数: |
1417 次 |
| 最近记录: |