C++ 以极高的精度获取时差

C++ 以极高的精度获取时差,c++,time,C++,Time,我需要得到当前时间并使用一个函数,然后计算出生成函数的时间,用尽可能大的时间数。。。我已编写此代码,但始终返回0秒:( #包括 #包括 使用名称空间std; 使用名称空间std::chrono; 无效编号(整数,整数*整数) { int a=*retNumber; __asm { mov-eax,numero neg eax//Apenas um ciclo da maquina,eba,mais rapido:) mova,eax } *retNumber=a; } int main() {

我需要得到当前时间并使用一个函数,然后计算出生成函数的时间,用尽可能大的时间数。。。我已编写此代码,但始终返回0秒:(

#包括
#包括
使用名称空间std;
使用名称空间std::chrono;
无效编号(整数,整数*整数)
{
int a=*retNumber;
__asm
{
mov-eax,numero
neg eax//Apenas um ciclo da maquina,eba,mais rapido:)
mova,eax
}
*retNumber=a;
}
int main()
{
整数=10;
int=0;
单调时钟::时间点开始=单调时钟::现在();
编号(编号和编号);
持续时间秒=单调时钟::现在()-开始;

我看不到有
循环。据我所知,编译器可以重新排列指令,这样就不会测量任何东西。我怀疑你能通过一次调用来测量这样一个小函数的计时。即使你会得到一些纳秒值,但它很难有价值,因为它很容易在数量级上波动。把你的函数放进去一个足够大的循环,然后测量。那么“高分辨率时钟::现在()”呢?好的,我试过使用“高分辨率时钟::现在()”,但是,返回值是0(whiout precision….:())您实际分析过代码吗?完全有可能完全删除“number”函数,因为您实际上没有使用“returno”。我可以肯定地说,即使使用“rdtsc”(时间戳计数器,它是一个以CPU时钟速度或CPU最高速度附近的恒定速度运行的计时器),您在计算当前时间戳上花费的时间将多于在内联汇编程序中执行这三条指令所花费的时间。使用循环并在大量数字上执行代码,以查看合理的结果。
#include <iostream>
#include <chrono>

using namespace std;
using namespace std::chrono;

void number(int numero, int *retNumber)
{
    int a = *retNumber;
    __asm
    {
        mov eax, numero
        neg eax // Apenas um ciclo da maquina, eba, mais rapido :)
        mov a, eax
    }
    *retNumber = a;
}

int main ()
{
    int numero = 10;
    int retorno = 0;
    monotonic_clock::time_point start = monotonic_clock::now();

    number(numero, &retorno);

    duration<double> sec = monotonic_clock::now() - start;
    cout << "f() took " << sec.count() << " seconds\n";
    return 0;
}