网站首页 > 技术文章 正文
今天无意中在测试一个常用功能时,发现纯C语言竟然比C++快15倍
#include <chrono>
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 < max; 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<double> 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倍
- 上一篇: C语言怎么样,好学吗?_c语言好学吗零基础
- 下一篇: 中小学生学习编程选择C++还是Python
猜你喜欢
- 2025-09-12 编程语言那么多,为何C语言能成为最成功的语言?
- 2025-09-12 为什么Java用途这么广泛,而地位不如C++
- 2025-09-12 学java还是学C++?_学java还是学c语言
- 2025-09-12 编程究竟难在哪?_编程难学吗举个例子
- 2025-09-12 中小学生学习编程选择C++还是Python
- 2025-09-12 C语言怎么样,好学吗?_c语言好学吗零基础
- 2025-09-12 C语言这么难,为何大家都如飞蛾扑火般学习?现在带你揭秘
- 2025-09-12 C++真的很难学好?大师告诉你程序设计要怎么做
- 2025-07-02 嵌入式程序开发,C语言和C++究竟应该用哪个?
- 2025-07-02 C语言?c++?到底先学哪个才能更好的理解编程,这些你造吗
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)