我有一个可以生成10000个随机数并将其写入文件的函数。
void generator(char filename[])
{
int i;
int n;
FILE* fp;
if((fp=fopen(filename,"w+"))==NULL)
{
printf("Fail creating file!");
}
srand((unsigned)time(NULL));
for(i=0;i<10000;i++)
{
n=rand()%10000;
fprintf(fp,"%d ",n);
}
fclose(fp);
}
如何使用C / C ++获取此函数的执行时间?
答案 0 :(得分:6)
代码分析不是一项特别容易的任务(或者,正如我们常说的那样,在编程方面,它是非常重要的&#34;。)问题是因为&#34;执行时间&# 34;以秒为单位测量并不特别准确或有用。
您想要做的是衡量 CPU周期数。这可以使用外部工具完成,例如[Load Date]
(Valgrind的工具之一)。您有99%的可能性。
如果您真的希望自己在代码中执行此操作,那么您将承担相当困难的任务。我亲自了解 - 我用C ++编写了一个比较基准测试库,用于实时性能测试。
如果真的希望走上这条道路,您可以研究基于英特尔处理器的基准测试(主要是转移到AMD),或者您使用的任何处理器。但是,正如我所说,这个主题是大而深入的,远远超出了StackOverflow答案的范围。
答案 1 :(得分:2)
您可以使用chrono库;
#include <chrono>
//*****//
auto start = std::chrono::steady_clock::now();
generator("file.txt")
auto end = std::chrono::steady_clock::now();
std::cout << "genarator() took "
<< std::chrono::duration_cast<std::chrono::microseconds>(end - start).count() << "us.\n";
答案 2 :(得分:1)
你已经有了一些很好的C answers,它们也适用于C ++
这是使用 <chrono>
:
auto tbegin = std::chrono::high_resolution_clock::now();
...
auto tend = std::chrono::high_resolution_clock::now();
auto tduration = std::chrono::duration_cast<std::chrono::microseconds>(tend - tbegin).count();
优点是您可以非常轻松地从microsecond
切换到millisecond
,seconds
或任何其他时间测量单位。
请注意,您可能对时钟精度有操作系统限制(在Windows环境中通常为15毫秒),因此只有当您真正超出此限制时,这才会产生有意义的结果。
答案 3 :(得分:0)
void generator(char filename)
{
clock_t tStart = clock();
/* your code here */
printf("Time taken: %.2fs\n", (double)(clock() - tStart)/CLOCKS_PER_SEC);
}
upd. And add #include <ctime>
答案 4 :(得分:0)
#include <ctime>
.....
clock_t start = clock();
...//the code you want to get the execution time for
double elapsed_time = static_cast<double>(clock() - start) / CLOCKS_PER_SEC;
std::cout << elapsed_time << std::endl;//elapsed_time now contains the execution time(in seconds) of the code in between
会在第一次和第二次clock()
来电之间给出代码的近似(不准确)执行时间
答案 5 :(得分:0)
试试这个
#include <sys/time.h>
struct timeval tpstart,tpend;
double timeuse;
//get time before generator starts
gettimeofday(&tpstart,NULL);
//call generator function
generator(filename);
//get time after generator ends
gettimeofday(&tpend,NULL);
//calculate the used time
timeuse=1000000*(tpend.tv_sec-tpstart.tv_sec)+tpend.tv_usec-tpstart.tv_usec;
timeuse/=1000000;
printf("Used Time:%fsec\n",timeuse);
答案 6 :(得分:-2)
暂时限制10000000
用秒表计时。将时间除以1000