开发者社区> 问答> 正文

C++ 与C 语言的排那个更好呢?

如果你还不熟悉 C++,你应该会惊奇 C++ 在某些时候速度比 C 更快些。特别是当代码比较简短时,因为 C++ 的强项 —— 内联(inlineing) 和模板化。

展开
收起
a123456678 2016-03-03 17:14:24 2412 0
1 条回答
写回答
取消 提交回答
  • 楼主可以参考一下代码:

    1 #include <iostream>
    2 #include <algorithm>
    3 #include <vector>
    4 #include "stop_watch.inl" // see https://gist.github.com/2057981
    5  
    6 #ifndef COUNT
    7 #define COUNT 100000000
    8 #endif
    9  
    10 int compare_int(const void* p1, const void* p2)
    11 {
    12 int i1 = *(int*)p1;
    13 int i2 = *(int*)p2;
    14  return i1 < i2 ? -1 : i1 > i2 ? 1 : 0;
    15 }
    16  
    17 int main()
    18 {
    19 srand(12345);
    20   
    21  int* data1 = new int[COUNT];
    22  int* data2 = new int[COUNT];
    23 
    24   for(int i=0; i<COUNT; i++) {
    25    data1[i] = data2[i] = ((rand() << 16) | rand());
    26  }
    27   
    28  {
    29    StopWatch stopWatch("std::sort: ");
    30    std::sort(data1, data1+COUNT);
    31  }
    32 
    33  {
    34    StopWatch stopWatch("qsort: ");
    35    qsort(data2, COUNT, sizeof(int), compare_int);
    36  }
    37   
    38  return 0;
    39 }

    下面结果是在 Macbook Air 上通过 (gcc -DCOUNT=100000 -O3 -Wall sort.cpp -lstdc++) 命令进行编译后的运行测试结果:

    count        c++         c    c/c++ ratio
        30000       1769      4949    2.80
       100000       6604     17665    2.67
       300000      22721     59713    2.63
      1000000      79107    231982    2.93
      3000000     266550    711608    2.67
     10000000     920159   2530939    2.75
     30000000    2909369   8259053    2.84
    100000000   10016849  28173682    2.81

    这是 C++ 的 inlining 技术导致的,而 C 语言还需要通过函数指针,这点消耗导致 C 语言的排序在性能上比 C++ 慢。
    有趣的是很多人认为 C++ 也会通过指针来调用一个函数。
    我的经验:要达到最佳的性能应该尽可能采用如下三个方法:

    • 限制分支
    • 优化第二级内存缓存
    • 考虑 C++ templating
    2019-07-17 18:51:42
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载