那该寄存器会不会溢出呢?我们可以计算一下,假设机器的主频是3GMHz, 也就是说1秒钟包含3,000,000,000个时钟周期,每个时钟周期为0.33333纳秒,则64位寄存器溢出所需要的时间为:
2^64 / 3000000000 ≈ 6148914691 秒 ≈71168天 ≈ 195年
因此TSC溢出基本是不可能的了。
RDTSC 是一条机器指令用于读取该时间戳寄存器中的值。
下面的程序就是通过在C语言调用RDTSC来得到时钟周期:
#include
#include
__int64 __declspec(naked)read_time_stamp_counter()
{
__asm cpuid;
__asm rdtsc;
__asm ret;
}
int main()
{
float ticks_1, ticks_2;
unsigned int i,j=0;
unsigned int loop = 4000000000;
ticks_1= (float)read_time_stamp_counter();
for(i=0;i
{
j++;
j++;
}
ticks_2= (float)read_time_stamp_counter();
printf("\ntotal ticks is : %f\n",ticks_2-ticks_1);
printf("\ntotal ticks per loop is