hrefspace

 找回密码
 立即注册
搜索
热搜: PHP PS 程序设计
查看: 554|回复: 5

判断操作与加操作

[复制链接]

458

主题

465

帖子

1415

积分

大司空

Rank: 5Rank: 5

积分
1415
发表于 2024-4-12 15:41:56 | 显示全部楼层 |阅读模式
我在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

别的语言也是这样吗?
回复

使用道具 举报

0

主题

197

帖子

41

积分

新手上路

Rank: 1

积分
41
发表于 2024-4-12 15:42:39 | 显示全部楼层
补一个图片

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

0

主题

165

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2024-4-12 15:43:28 | 显示全部楼层
ccc(i) = aaa(i) + ddd(i)
这个操作包括
  1. 计算地址aaa[i]//大概是汇编的lea命令读取//对应mov计算地址ddd[i]读取相加计算地址ccc[i]储存//对应mov
复制代码

            If aaa(i) = 0 Then
'                If ddd(i) = 0 Then
'
'                End If
            End If
在其他语言里,这样的if很可能直接被编译器优化掉
回复

使用道具 举报

0

主题

194

帖子

38

积分

新手上路

Rank: 1

积分
38
发表于 2024-4-12 15:44:07 | 显示全部楼层
不想抠那么细了。从表面看一下效率就行了。因为有时候纠结于究竟是执行两个判断呢,还是一个加法操作呢, 所以才有这个测试。
回复

使用道具 举报

0

主题

172

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2024-4-12 15:44:14 | 显示全部楼层
在数组aaa,ddd随机写入一半的1就应该会显著变慢
回复

使用道具 举报

0

主题

188

帖子

171

积分

关内侯

Rank: 2

积分
171
发表于 2024-4-12 15:44:45 | 显示全部楼层
通常来说,加法是快于判断语句的,只是楼主的测试例子不合理,看起来加法更慢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|hrefspace

GMT+8, 2024-5-2 02:28 , Processed in 0.062313 second(s), 22 queries .

Powered by hrefspace X3.4 Licensed

Copyright © 2022, hrefspace.

快速回复 返回顶部 返回列表