#include <iostream>
#include <algorithm>
#include <vector>
#include <chrono>
template<class Resolution = std::chrono::milliseconds>
class ExecutionTimer {
public:
using Clock = std::conditional_t<std::chrono::high_resolution_clock::is_steady,
std::chrono::high_resolution_clock,
std::chrono::steady_clock>;
ExecutionTimer() = default;
~ExecutionTimer() {
std::cout
<< "Elapsed: "
<< std::chrono::duration_cast<Resolution>(Clock::now() - mStart).count()
<< std::endl;
}
private:
Clock::time_point mStart = Clock::now();
};
int main() {
ExecutionTimer<> timer;
std::vector<int> v(50000000);
std::sort(std::begin(v), std::end(v));
return 0;
}
我尝试使用2个不同的编译器编译上述C ++代码,并观察两个.exe文件的运行时间差异
我使用环境变量
CL -> cl /ehsc Benchmark.cpp
364 (ms)
g++ -> g++ -std=c++17 Benchmark.cpp -o bench17
16565 (ms)
有人能告诉我为什么会有巨大差异吗?
答案 0 :(得分:0)
默认情况下,g ++根本不执行任何优化。对于使用标准模板的代码来说,这尤其成问题,这些模板几乎完全在预编译的标准库之外实现,因此缺乏优化是非常明显的。
我没有Microsoft编译器进行测试,但在我的系统上,启用-O2
会将执行时间从25秒以上缩短到不到1秒。