代码之家  ›  专栏  ›  技术社区  ›  abdolahS

布尔数组求和的速度

  •  0
  • abdolahS  · 技术社区  · 10 年前

    假设我想对布尔值数组求和:

    bool arrray[LARGE_SIZE];
    

    以下哪一个代码速度更快?

    int sum=0;
    for(int i=0;i<LARGE_SIZE)
       if(array[i]) sum++;
    

    int sum=0;
    for(int i=0;i<LARGE_SIZE)
       sum+=array[i] ;
    

    还有其他加快速度的方法吗? 这些代码在一个循环中使用,即使是很小的速度差也很重要。

    1 回复  |  直到 10 年前
        1
  •  6
  •   Community CDub    8 年前

    总是 测量 。只有度量才能告诉你代码在给定上下文(给定的编译器和选项、给定的机器、给定的负载等)中的行为。然而,如果编译器没有优化选择,没有选择的代码更有可能表现良好。


    如果速度真的很重要,我也会试试 std::accumulate ,因为它可能只是针对手头的任务进行了优化。


    作为 Tony D comment to the question 算法和数据结构的选择通常比微尺度优化对速度的影响更大。例如,通过更新每个更改值的操作的计数,计数的检查可以是恒定的时间。不幸的是,据我所知 std::bitset (对于编译时已知大小的数组)或 boost::dynamic_bitset (对于动态大小数组)保证了这种行为。