摘要:以上代码用vs2022编译,并把C++所有优化功能打开,比如:最大优化(优选速度) (/O2)
今天无意中在测试一个常用功能时,发现纯C语言竟然比C++快15倍
#include
int main(int argc, char* args)
{
int max = 1 * 10000;
int c1;
int c2;
int c;
c1 = (int)nx::Tick;
//auto start = std::chrono::high_resolution_clock::now;
for (int i = 0; i
{
void* p = malloc(1); free(p);
//char* a = new char[1]; delete a;
}
//auto end = std::chrono::high_resolution_clock::now;
//std::chrono::duration elapsed = end - start;
//double cc = elapsed.count * 1000;
c2 = (int)nx::Tick;
c = c2 - c1;
//printf("\np=%s\n", str.Value);
printf("\nc=%d\n", c);
//nx::Test test;
//test.Run;
return 0;
}
以上代码用vs2022编译,并把C++所有优化功能打开,比如:最大优化(优选速度) (/O2)
运行时间是250毫秒-300毫秒
同样,用vs2022创建个工程,把main.cpp改名为纯C的风格,main.c,
编译后运行时间是15毫秒-27毫秒
我开始以为是因为C++执行void* p = malloc(1); free(p);不够优化,便改成char* a = new char[1]; delete a;,结果也是一样,运行时间基本不变。反复在main.cpp和main.c两个项目中切换编译,各种优化都打开,代码生成都设定多线程 DLL (/MD)
结果全是一样的结果,纯C竟然比C++快了15倍,把申请内存从1字节改成100字节,也是一样,就是快了15倍到20倍左右。
其实纯C完全可以用面向对象的方式开发项目,只是纯C的每个新“对象”要比C多打几行代码的事。所以,个人认为,如果不是非C++不可的情况下,还是用纯C开发吧,一样可以做到面向对象开发,一个可以用纯C做到虚涵数,一样可以用纯C做到继承的功能,只是要多打几行代码而已,但这运行效率却快了20倍
来源:帝商朝