gpt4 book ai didi

c++ - std::chrono::duration_cast count() 返回零

转载 作者:行者123 更新时间:2023-11-30 01:45:44 28 4
gpt4 key购买 nike

这是一个简单的程序(数组排序):

#include <stdio.h>
#include <conio.h>
#include <array>
#include <algorithm>
#include <chrono>

typedef unsigned int myInt;

static void shellSort(myInt arr[], const myInt length) {
if (length < 2) {
return;
}
myInt i, j, step;
myInt tmp;
for (step = length / 2; step > 0; step /= 2) {
for (i = step; i < length; i++) {
tmp = arr[i];
for (j = i; j >= step; j -= step) {
if (tmp < arr[j - step]) {
arr[j] = arr[j - step];
}
else {
break;
}
}
arr[j] = tmp;
}
}
}

void main() {
const int arrSize = 2000;
std::array<myInt, arrSize> arr;
std::chrono::high_resolution_clock::time_point timeStart, timeEnd;

//Array filling and shuffling
for (int i = 0; i < arrSize; i++) {
arr[i] = i + 1;
}
std::random_shuffle(arr.begin(), arr.end());

//Array sorting and time measurement
timeStart = std::chrono::high_resolution_clock::now();
shellSort(arr._Elems, arrSize);
timeEnd = std::chrono::high_resolution_clock::now();

printf("%llu", std::chrono::duration_cast<std::chrono::nanoseconds>(timeEnd - timeStart).count());
_getch();
}

它返回 0. 0 纳秒用于对 2000 个元素的数组进行排序。看起来很奇怪。我注意到当函数执行时间很短但为 0 纳秒时会发生这种情况 - 这绝对是个谎言。

Screenshot

Visual Studio 2013,构建 - 发布,平台 x64,Win10 x64

请告诉我,为什么会发生这种情况?

最佳答案

C++ 标准不要求 std::high_resolution_clock 的最低分辨率。

20.11.7.3

Class high_resolution_clock [time.clock.hires] Objects of class high_resolution_clock represent clocks with the shortest tick period. high_resolution_- clock may be a synonym for system_clock or steady_clock.

强调:可能是 system_clock 或 steady_clock 的同义词

您需要查看编译器的文档。您的编译器的 std::high_resolution_clock 的分辨率可能太粗糙,无法测量如此小的间隔,因此您测量的开始和结束时间是相同的。

关于c++ - std::chrono::duration_cast count() 返回零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34133658/

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