【发布时间】:2010-12-31 21:16:37
【问题描述】:
我试图找到一种方法来为加密方法找到某种纳秒级的时间。我在 stackoverflow 上找到了这段代码,它似乎无法在 VS2010 中编译,但我不知道为什么。错误是'time = GetCpuClocks()'并说“错误C3861:'GetCpuClocks':找不到标识符”,我不太明白为什么?我也遇到了结构声明中的“int32”类型的问题。
(我认为将“时间”声明为“长”是可以的?还是应该是 __int64 ?
提前致谢
int _tmain(int argc, _TCHAR* argv[])
{
__int64 time;
time = GetCpuClocks();
}
inline __int64 GetCpuClocks() {
// Counter
struct { int32 low, high; } counter;
// Use RDTSC instruction to get clocks count
__asm push EAX
__asm push EDX
__asm __emit 0fh
__asm __emit 031h
// RDTSC
__asm mov counter.low, EAX
__asm mov counter.high, EDX
__asm pop EDX
__asm pop EAX
// Return result
return *(__int64 *)(&counter);
}
【问题讨论】:
-
你可能需要把 _tmain 放在 GetCpuClocks()...
-
好吧,伙计们,我发现我需要先声明方法!我唯一的问题是为什么我要使用 int32 来处理这么大的数字?我的一些值是 -xxxxxxxxx 这是否意味着我应该始终使用 64 位数字?
-
nanosecond-level timing你不会找到的。变数太多了。该函数获取时间非常快,但它不是用来计时的。 -
Falmarri 是对的,如果在您的操作过程中碰巧出现中断,您的时间可能会减少数十甚至数百纳秒。另一方面,您可以收集大量样本并消除异常值,因此获得纳秒级准确计时并非不可能。
-
如果你想要一些随机的东西,尤其是加密需求,你为什么不使用 CryptoAPI 呢?