判断操作与加操作
我在VBA中测试加操作和判断操作,发现一个加操作约等于两个判断操作。Dim ddd(1000000) As Long
Dim aaa(1000000) As Long
Dim ccc(1000000) As Long
Dim i As Long
Dim TempsUtilise As Single
QueryPerformanceCounter Counter1
For i = 0 To 1000000
ccc(i) = aaa(i) + ddd(i)
Next i
QueryPerformanceCounter Counter2
TempsUtilise = (Counter2 - Counter1) / Frequency
MsgBox TempsUtilise
QueryPerformanceCounter Counter1
For i = 0 To 1000000
If aaa(i) = 0 Then
' If ddd(i) = 0 Then
'
' End If
End If
Next i
QueryPerformanceCounter Counter2
TempsUtilise = (Counter2 - Counter1) / Frequency
MsgBox TempsUtilise
Msgbox1=0.0434334
Msgbox2=0.0234633
别的语言也是这样吗? 补一个图片 ccc(i) = aaa(i) + ddd(i)
这个操作包括计算地址aaa//大概是汇编的lea命令
读取//对应mov
计算地址ddd
读取
相加
计算地址ccc
储存//对应mov
If aaa(i) = 0 Then
' If ddd(i) = 0 Then
'
' End If
End If
在其他语言里,这样的if很可能直接被编译器优化掉 不想抠那么细了。从表面看一下效率就行了。因为有时候纠结于究竟是执行两个判断呢,还是一个加法操作呢, 所以才有这个测试。 在数组aaa,ddd随机写入一半的1就应该会显著变慢 通常来说,加法是快于判断语句的,只是楼主的测试例子不合理,看起来加法更慢
页:
[1]