崇左市网站建设_网站建设公司_门户网站_seo优化
2025/12/24 15:58:36 网站建设 项目流程

一、什么是基准测试?

当你写了一些代码,你想知道它实际运行有多快,因为你正在处理一个对性能想当关键的,部分,或者你正在测试你刚刚学学的新技术。但是你想把它的性能和你过去做的方法做个比较,看看哪种方法更快,在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会去掉任何多余的东西。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询