如果你还不熟悉 C++,你应该会惊奇 C++ 在某些时候速度比 C 更快些。特别是当代码比较简短时,因为 C++ 的强项 —— 内联(inlineing) 和模板化。
楼主可以参考一下代码:
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++ 也会通过指针来调用一个函数。
我的经验:要达到最佳的性能应该尽可能采用如下三个方法:
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。