【问题标题】:Find out run time of a C/C++ program [closed]找出 C/C++ 程序的运行时间 [关闭]
【发布时间】:2017-12-30 18:41:30
【问题描述】:

我想知道一个 C/C++ 程序为某个输入文件生成输出需要多少时间。

通常,我制作一个 txt 或其他格式的输入文件,然后生成一个 txt 或任何其他格式的输出文件。 例如:

int main()
{
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);

    //take input and give output

    //fclose(stdin);
    //fclose(stdout);

    return 0;
}

我运行程序,它会在控制台窗口上显示执行时间。但我不确定这是否是了解执行时间的最准确方法。

我需要知道某个输入文件的程序的执行时间,以便为某个学校级别的编程竞赛中的编程问题设置时间限制。

【问题讨论】:

  • 使用profiler
  • 如果您没有分析器,std::chrono 可以提供帮助:en.cppreference.com/w/cpp/chrono 查看底部的示例。
  • 您可以在程序开始时启动计时器并在结束时停止。只需在某处保存或显示时间值并检查即可。
  • 哪种语言,C 或 C++?他们有不同的库来获取时钟时间和分析。
  • 我听说过很多关于这个“C/C++”的东西,它有什么作用?

标签: c++ c


【解决方案1】:

在 Linux 上,您可以使用 time 命令。写time yourexecutable在windows上可以使用powershell命令Measure-Command {yourexecutable}。将 yourexecutable 替换为实际的程序二进制文件。

【讨论】:

    【解决方案2】:

    在 C 语言中,您可以使用 time() 函数来测量程序特定部分的速度,例如:

    # include <time.h>
    int main() {
        /* Do stuff here */
        time_t start, finish;
        time(&start);    /* time() stores the value in the pointed buffer */
        /* Measure this part */
        time(&finish);
        printf("Part 1 took %li seconds\n", finish - start);
        /* %li may not be the good flag according to your system. */
        /* Do extra stuff here */
        return 0;
    }
    

    我不知道如何在 CPP 中执行此操作...

    【讨论】:

    • 有人能解释为什么投反对票吗?我不认为我的回答是错误的,显然它没有说明如何为 CPP 做,但其他人回答了。
    • 我猜可能反对票可能来自某些 C++ 顽固分子?这对我来说似乎是一个非常好的答案......
    【解决方案3】:

    将感兴趣的代码包围在 std::chrono 中,保存开始时间,然后减去结束时间以获得持续时间。

    auto startTime = std::system_clock::now();
    /* test code */
    auto dur = std::system_clock::now() - startTime;
    std::cout << "Duration: " << dur << std::endl;
    

    然后,您可以计算出给入门程序多长时间,并将持续时间与该时间进行比较。强制中止条目有点困难,这几乎需要一个包装程序将条目作为单独的进程启动(无论如何这不是一个坏主意),如果超时则终止进程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-05
      • 2016-09-02
      • 1970-01-01
      • 2021-07-18
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      相关资源
      最近更新 更多