ShuXueZhenMiHu 发表于 2020-11-13 11:39:50

判断操作与加操作

我在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

别的语言也是这样吗?

ShuXueZhenMiHu 发表于 2020-11-15 03:03:09

补一个图片

.·.·. 发表于 2020-11-22 21:45:47

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很可能直接被编译器优化掉

ShuXueZhenMiHu 发表于 2020-11-24 10:21:33

不想抠那么细了。从表面看一下效率就行了。因为有时候纠结于究竟是执行两个判断呢,还是一个加法操作呢, 所以才有这个测试。

mathe 发表于 2020-11-24 17:49:38

在数组aaa,ddd随机写入一半的1就应该会显著变慢

mathe 发表于 2020-11-30 06:10:21

通常来说,加法是快于判断语句的,只是楼主的测试例子不合理,看起来加法更慢
页: [1]
查看完整版本: 判断操作与加操作