std :: chrono :: duration_cast count()返回零

时间:2015-12-07 12:33:14

标签: c++ arrays sorting chrono

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

#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,Build - Release,Platform x64,Win10 x64

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

1 个答案:

答案 0 :(得分:4)

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

  

20.11.7.3

     

类high_resolution_clock [time.clock.hires]类的对象   high_resolution_clock表示具有最短滴答周期的时钟。   high_resolution_- clock可以是system_clock的同义词   steady_clock。

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

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