荒谬1:C++比C性能高

荒谬1:C++比C性能高

曾经不知道何时,各个领域都在传递一些荒谬的价值观,这将会给行业以及后来人带来无数的弯路和错误,对此深感痛惜的基础上,尝试尽力去挽救一些荒谬,相信星星之火吧,四个基本原则:
1、以理服人,争论的时候请拿出具体的数据和例子,切记尽可能相同条件;
2、可以吵架,但不能对人;
3、任何大牛名字都不能作为论据,请拿出大牛的例子;
4、不要毫无意义的争论。比如知道这个有什么意义等等。答:没意义,性能差距甚微,而且相互不可替代,但是需要知道。
荒谬1:C++比C性能高
这个结论来自于脉脉,作为一个开发的老兵,同时也算是一个思想开明者(不倚老卖老)。为了驳斥这个荒谬,特意写了一个比较小例子。
既然是比较,那就必须尽可能是相同逻辑,相同操作方式,同样足够简单和明了。C++和C的性能相差很近,当然前提是实现方式一致。否则毫无比较的意义。举个段子,Java和C++的性能差不多??因为使用GraalVM。(这种比较不是扯淡嘛)
一、C的例子
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <time.h>
4 struct Test
5 {
6 int a;
7 char c;
8 };
9
10 struct Test* create(int a, char c)
11 {
12 struct Test* test = (struct Test*)malloc(sizeof(struct Test));
13 test->a = a;
14 test->c = c;
15 return test;
16 }
17
18 void main()
19 {
20 int i;
21 time_t t, t1;
22 time(&t);
23
24 for(i = 0; i < 1000000000; i++)
25 {
26 struct Test* test = create(1, ‘a’);
27 free(test);
28 }
29 time(&t1);
30 printf(“time is %d\n”, t1 - t);
31
32 }
这个例子足够简单,就是有个结构体包含两个简单类型的变量,初始化并释放内存,这个操作执行1000000000次。
编译并执行:
[root@hadoop-master ~]# gcc test.c -o test
[root@hadoop-master ~]# ./test
time is 18
从结果来看,时间是18S
二、C++的例子
h文件
1 class Test
2 {
3 public:
4 Test(){}
5 ~Test(){}
6 public:
7 int a;
8 char c;
9 };
为了和C完全一致,我们不使用虚函数,同样成员变量也指定为public。
cpp文件
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <time.h>
4 #include “testcpp.h”
5
6 Test* create(int a, char c)
7 {
8 Test* test = new Test();
9 test->a = a;
10 test->c = c;
11 return test;
12 }
13
14 int main()
15 {
16 time_t t,t1;
17 time(&t);
18 for(int i = 0; i < 1000000000; i++)
19 {
20 Test* test = create(1, ‘a’);
21 delete test;
22 }
23 time(&t1);
24 printf(“cpp time is %d\n”, t1 - t);
25 return 1;
26 }
我们非测试部分依然使用c的方式,尽可能保持一致。
编译并执行:
[root@hadoop-master ~]# g++ testcpp.h test.cpp -o testcpp
[root@hadoop-master ~]# ./testcpp
cpp time is 20
从结果来看,C++的耗时是20S,略高于C。
三、重复执行
为了排除以上结果具备偶然随机性,C和C++的例子均执行三次
[root@hadoop-master ~]# ./test
time is 15
[root@hadoop-master ~]# ./test
time is 15
[root@hadoop-master ~]# ./test
time is 15
C的平均时长为15S
[root@hadoop-master ~]# ./testcpp
cpp time is 19
[root@hadoop-master ~]# ./testcpp
cpp time is 19
[root@hadoop-master ~]# ./testcpp
cpp time is 19
C++的平均时长是19S

结论依然是C略高于C++

原因
上面的例子,为什么C会略高于C++呢,原因主要是有两个方面:
1、class分配内存的是否要给析构函数分配内存;
2、在C++中new是有长度安全检查的,但是C中的malloc是没有的。

在实际的情况中,由于C++有许多的库,因此更不会去操作基础类型,所以性能会差更多,比如最简单的字符串操作,在C++中没人会去使用char吧,如果你有兴趣的话,可以做这样的事情,读取一个10M的文件,然后替换部分的内容,使用std::string和char分别做一下,哪怕操作char就不使用任何算法从头到尾循环,单线程,只要不乱拷贝都是远远高于std::string,当然std::string_view类似,甚至比你写的char更优秀(真实的阅读软件案例,当年没有C++17,只能操作字符串指针了)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值