如何在C / C ++

时间:2016-04-11 18:34:40

标签: c++ c time

我有一个可以生成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 ++获取此函数的执行时间?

7 个答案:

答案 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>

的原生C ++解决方案
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切换到millisecondseconds或任何其他时间测量单位。

请注意,您可能对时钟精度有操作系统限制(在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