当前位置: 首页 > news >正文

C++学习笔记 38 基准测试

一、什么是基准测试?

当你写了一些代码,你想知道它实际运行有多快,因为你正在处理一个对性能想当关键的,部分,或者你正在测试你刚刚学学的新技术。但是你想把它的性能和你过去做的方法做个比较,看看哪种方法更快,在C++中需要如何做呢?如何实际测量C++代码的性能?

二、确保你测量的部分就是实际上被编译的代码

因为C++编译器可以优化代码,剥离某些代码,甚至完全更改代码。

#include<iostream>
#include<chrono>class Timer2 {
public:std::chrono::steady_clock::time_point start, end;////std::chrono::duration<float> duration;Timer2() {start = std::chrono::high_resolution_clock::now();}~Timer2() {end = std::chrono::high_resolution_clock::now();stop();}void stop() {auto newStart = std::chrono::time_point_cast<std::chrono::microseconds>(start).time_since_epoch().count();auto newEnd = std::chrono::time_point_cast<std::chrono::microseconds>(end).time_since_epoch().count();auto duration = newEnd - newStart;double ms = duration * 0.001;std::cout << "It takes " << duration << " us (" << ms << " ms)\n";}
};void testTimerDebugAndRelease() {int value = 0;{Timer2 timer2;for (int i = 0; i < 1000000; i++)value += 2;}std::cout << value << std::endl;
}int main() {std::cin.get();
}
  1. debug模式下的汇编结果:有实际CPU执行逻辑
    debug模式下的汇编结果

  2. release模式下的汇编结果:无实际CPU执行逻辑

在release模式下,编译器看了这段代码,并意识到,这并不需要在运行时计算,于是进行了优化,直接在编译时就计算出来了。然后直接打印出2百万,没有进行任何形式的增量计算。那么,这里的计时器的结果将是完全无用的,毫无意义的。
image

  1. 实际案例:测试哪个更快。
#include<iostream>
#include<chrono>
#include<array>int main() {struct Vector2 {float x, y;};std::cout << "Make Shared\n";{std::array<std::shared_ptr<Vector2>, 1000> sharedPtrs;Timer2 timer2;for (int i = 0; i < sharedPtrs.size(); i++)sharedPtrs[i] = std::make_shared<Vector2>();}std::cout << "New Shared\n";{std::array<std::shared_ptr<Vector2>, 1000> sharedPtrs;Timer2 timer2;for (int i = 0; i < sharedPtrs.size(); i++)sharedPtrs[i] = std::shared_ptr<Vector2>(new Vector2());}std::cout << "Make Unique\n";{std::array<std::unique_ptr<Vector2>, 1000> sharedPtrs;Timer2 timer2;for (int i = 0; i < sharedPtrs.size(); i++)sharedPtrs[i] = std::make_unique<Vector2>();}std::cin.get();
}
  1. 一定要确保你要测试的代码,在发布时是真正有意义的,因为你不会在调试时发布代码,release会去掉任何多余的东西。
http://www.jsqmd.com/news/134582/

相关文章:

  • 三菱FX PLC组态下的五层电梯智能控制系统方案
  • 邮件系统反滥用机制设计与实现
  • 可解释AI门槛大降!曼大LLM控制技术资源需求削减90%+,LangVAE框架加速可信AI落地
  • 全域精准赋能:2025年末GEO优化服务商甄选指南与核心能力解析 - 品牌推荐排行榜
  • 2025年12月济南国际婴幼园推荐榜:济南/东部国际婴幼园/历下东部送托/小月龄托育/国际托育中心/专业师资托育/高知家庭托育,比查尔德领衔高品质托育,解锁安心之选 - 海棠依旧大
  • 局域网内部邮件服务器搭建方法 - U-Mail邮件系统
  • Open-AutoGLM免root部署完全手册(从Docker到沙箱隔离的4种方案)
  • 最近一个thinkphp项目首页总是跳转到一个国外垃圾网址,怎么处理?
  • 【Open-AutoGLM网页操作全指南】:手把手教你快速上手AI自动化建模
  • 2025年比较好的电视柜缓冲铰链/二段力缓冲铰链厂家最新权威推荐排行榜 - 品牌宣传支持者
  • 2025 年面试复盘大全 500 道:Redis+ZK+Nginx+ 数据库 + 分布式 + 微服务
  • 蓝队必读:HW行动安全防护指南
  • 5000万欧元助力欧洲工业转型!EIB与Comau达成融资协议,聚焦机器人与自动化研发
  • -2025.12.9
  • 西城微科智能电子秤PCBA解决方案
  • Haystack、RAGFlow、LlamaIndex对比与选型
  • 为什么你的Prompt总失效?Open-AutoGLM改prompt的8大避坑指南
  • 揭秘Open-AutoGLM核心技术:如何打造自主操作的GUI代理系统
  • Claude Code + ZCF | 五分钟配置免费AI编程助手!告别付费与繁琐!
  • 2025年12月数字孪生,电力数字孪生,实景数字孪生公司推荐:行业技术测评与合作选择指南 - 品牌鉴赏师
  • 2025年推荐哈尔滨婚姻律师事务所权威榜 - 品牌宣传支持者
  • 2025年评价高的玻璃/A类防火玻璃用户口碑最好的厂家榜 - 品牌宣传支持者
  • 李小龙成为泰森同样量级,保持速度10%的减少,体重需要多少,挥拳力量出脚力量有多大?
  • HW蓝队面试必备-流量特征分析总结
  • 2025年12月接近传感器,环形接近传感器,耐高温接近传感器厂商推荐:聚焦企业传感技术实力与核心竞争力 - 品牌鉴赏师
  • DeepSeek-R1-Distill-Llama-70B:推理效率新标杆
  • 推荐几家Facebook代运营公司,精选上海、苏州、无锡地区5家优质Facebook海外营销推广服务商 - 品牌2026
  • 全域适配与价值深耕:2025年末GEO优化系统优选指南 - 品牌推荐排行榜
  • 极简代码,5分钟上手XXTEA加密解密
  • git rebase和merge区别