C++ 记录程序运行时间的四种方法
在C++中,有多种方法可以用于记录程序的运行时间。以下是四种常见的方法:
使用
<ctime>
库中的clock()
函数:clock()
函数可以用于计算CPU时间。它返回自程序启动以来处理器使用的时间,这个时间可以用来估算程序执行的耗时。
#include <iostream>
#include <ctime>
int main() {
std::clock_t start, end;
start = std::clock();
// 要测量的代码段
for (int i = 0; i < 1000000; ++i);
end = std::clock();
double duration = double(end - start) / CLOCKS_PER_SEC;
std::cout << "CPU Time used: " << duration << " seconds" << std::endl;
return 0;
}
使用
<chrono>
库:std::chrono
库提供了更高精度和更高自由度的时间测量功能,通常可以记录从纳秒到小时的时间。
#include <iostream>
#include <chrono>
int main() {
auto start = std::chrono::high_resolution_clock::now();
// 要测量的代码段
for (int i = 0; i < 1000000; ++i);
auto end = std::chrono::high_resolution_clock::now();
std::chrono::duration<double> duration = end - start;
std::cout << "Time used: " << duration.count() << " seconds" << std::endl;
return 0;
}
使用
<sys/time.h>
库(在Linux和UNIX系统上):- 这种方法不如
<chrono>
通用,但在一些情况下仍然可能使用。
#include <iostream>
#include <sys/time.h>
int main() {
struct timeval start, end;
gettimeofday(&start, nullptr);
// 要测量的代码段
for (int i = 0; i < 1000000; ++i);
gettimeofday(&end, nullptr);
double duration = (end.tv_sec - start.tv_sec) + (end.tv_usec - start.tv_usec) / 1e6;
std::cout << "Time used: " << duration << " seconds" << std::endl;
return 0;
}
- 这种方法不如
使用第三方库,如Boost:
- 如果在项目中使用Boost库,可以使用Boost提供的时间测量工具。
#include <iostream>
#include <boost/chrono.hpp>
int main() {
boost::chrono::high_resolution_clock::time_point start = boost::chrono::high_resolution_clock::now();
// 要测量的代码段
for (int i = 0; i < 1000000; ++i);
boost::chrono::high_resolution_clock::time_point end = boost::chrono::high_resolution_clock::now();
boost::chrono::duration<double> duration = end - start;
std::cout << "Time used: " << duration.count() << " seconds" << std::endl;
return 0;
}
不同的方法有不同的应用场景,可以根据具体需要选择。其中std::chrono
是现代C++最佳实践,推荐在C++11及以上标准中使用。