gpt4 book ai didi

C++ chrono::duration_cast 总是输出 "0 seconds"

转载 作者:行者123 更新时间:2023-12-01 14:18:55 24 4
gpt4 key购买 nike

这是我在这里的第一个问题,我也是 C++ 的新手,但我会尽我所能尽可能具体。如果我含糊不清,请告诉我:

我正在尝试使用 chrono 和 duration_cast 来测量排序方法(合并排序)对给定整数数组进行排序所花费的时间。这是有问题的代码片段:

    auto t1 = std::chrono::high_resolution_clock::now();
mergesort(sortingArray, temp, 0, num - 1);
auto t2 = std::chrono::high_resolution_clock::now();
std::chrono::duration<double, std::milli> fp_ms = t2 - t1;
std::cout << fp_ms.count() << " seconds\n";

而且我得到的输出始终是“0 秒”,无论我将需要排序的数组制作成多大。即使它对一百万个整数进行排序并且执行时间很长,它仍然会给我相同的输出。

我基本上遵循此处给出的示例:http://en.cppreference.com/w/cpp/chrono/duration/duration_cast

只是我使用的不是 f(),而是我的归并排序函数。如何让它正确测量我的排序方法?

编辑:我在 Windows 10 中使用 minGW 通过 Powershell 进行编译。命令如下所示:

g++ -std=c++11 .\Merge.cpp

最佳答案

TL;DR:看起来 std::chrono 实现 (libstdc++) 在 Windows 上很差,你不会得到比秒更好的东西。

长版:

libstdc++ typedefs std::chrono::high_resolution_clockstd::chrono::system_clock。根据implementation调用 std::chrono::system_clock::now() 将导致调用以下之一,具体取决于平台:

  • syscall(SYS_clock_gettime, CLOCK_REALTIME, ...),这是一个 Linux 系统调用
  • clock_gettime(CLOCK_REALTIME, ...),这是 Windows 不支持的 POSIX 系统调用
  • gettimeofday(...),这是 Windows 不支持的 POSIX 函数
  • std::time() 作为回退

因此,std::time() 在 Windows 内部被调用。未指定std::time()的编码;但是,大多数系统都遵循 POSIX specification :

The time() function shall return the value of time in seconds since the Epoch.

微软自己做 the same :

Return the time as seconds elapsed since midnight, January 1, 1970, or -1 in the case of an error.

我认为可以肯定地说,使用 MingW 的 std::chrono 不会获得更高的分辨率。

至于你的问题,你有两个选择:

  1. 如果您的程序仅在 Windows 上运行,您可以使用 QueryPerformanceCounter 构建您自己的时间测量
  2. 如果你想让它便携,请使用 Boost.Chrono .它使用 native Windows APIs并且应该提供更好的解决方案。

关于C++ chrono::duration_cast 总是输出 "0 seconds",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36913864/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com