-
-
[求助]为什么2次运行时间差异这么大?
-
发表于:
2023-5-18 11:35
5583
-
为什么if里的数据改变了,两句mov eax, NOP,mov al, byte ptr[eax]
指令花费的时间变了80个时钟周期
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | int main( int argc, char * * argv, char * * envp)
{
int num = 0 ;
for ( int i = 0 ;i< 1000 ;i + + )
{
for ( int i = 0 ; i < 100 ; i + + )
{
if ( 0 ) / / 此处为 0 ,最后输出为 80 ,为 if ( 1 ),输出为 160
{
_asm nop
}
}
DWORD64 time1, time2;
time1 = 0 ;
time2 = 0 ;
DWORD NOP;
_asm mov NOP, offset l
NOP + = 0x10 ;
_mm_clflush((void * )NOP);
_mm_mfence();
time1 = __rdtsc();
/ * 可换成_asm {
rdtscp;
mov dword ptr[time1],eax
mov dword ptr[time1 + 4 ],edx
} * /
_mm_mfence();
_asm mov eax, NOP
_asm mov al, byte ptr[eax]
l:
if ( 0 )
{
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
_asm nop
}
_mm_mfence();
time2 = __rdtsc();
/ * 可换成_asm {
rdtscp;
mov dword ptr[time2], eax
mov dword ptr[time2 + 4 ], edx
} * /
if (time2 - time1> 160 )
{
num + + ;
}
printf( "%lld\n" , time2 - time1);
}
printf( "%d\n" , num);
}
|
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2023-5-18 17:09
被mb_xmdcmwxq编辑
,原因: