找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 131|回复: 5

[讨论] 求助:程序速度比较

[复制链接]
发表于 昨天 22:01 | 显示全部楼层 |阅读模式
数组 a[0]~a[n-1],共n个元素。
组成数值圆环,首尾相连。
首值下标 i=0,向后移动(i++)
尾值下标 j=n-1,向前移动(j--)

如何做到数值循环访问,以下有2个方案
方案A:
while (true)
{
  if  ( i≠(n-1) )
    i++ ;
  else
    i=0 ;

  if  ( j≠0 )
    j-- ;
  else
    j=n-1 ;

  其它程序段
}

方案B:
while (true)
{
  i = (i+1)  mod  n  ;
  j = (n+j-1)  mod  n  ;

  其它程序段
}

两种边界处理方式,哪个更快一些?
例如采用C++编译,方案A 的 if 语句,方案B 的mod运算,耗用机器指令的时钟周期,相差有多少?
个人有以下理解,if 语句 编译成机器语言后,大约耗时20个时钟。而mod运算本质上是除法指令,大约耗时200个时钟。两者耗时相差10倍。
这样理解是否有误区?
个人更喜欢方案A,直观、简单、容易理解。
而方案B,看起来高大上,纸面上程序简洁,但是难理解,而且速度慢。

发表于 昨天 22:07 | 显示全部楼层
我是菜鸟,期待牛人的解答
回复

使用道具 举报

发表于 昨天 22:21 | 显示全部楼层
本帖最后由 wintoflash 于 2026-6-13 23:28 编辑
数组 a[0]~a[n-1],共n个元素。

这个n,是编译期常量还是变量?
如果n是编译期常量,对于 x mod n 这种语句,编译器会自动优化为移位和加减法操作,不会生成除法指令,这种情况下不好说。
如果n是编译期常量,且是 2 的整数幂(如1024),编译器会自动优化为只有移位操作,一般情况下是方案B快。
如果n是变量,那肯定是方案A快。

点评

大佬还在坚守论坛么。。有好多技术达人都不在论坛了,可惜了  详情 回复 发表于 2 小时前

评分

参与人数 1无忧币 +1 收起 理由
proof + 1 赞一个!

查看全部评分

回复

使用道具 举报

发表于 昨天 22:27 | 显示全部楼层
我只会一丢丢AU3,不懂撸主说的圆环是啥...


二○二六年六月十三日
回复

使用道具 举报

发表于 昨天 22:34 | 显示全部楼层
wintoflash 发表于 2026-6-13 22:21
这个n,是编译期常量还是变量?
如果n是编译期常量,对于 x mod n 这种语句,编译器会自动优化为移位和加 ...

这就是专业阿
回复

使用道具 举报

发表于 2 小时前 | 显示全部楼层
wintoflash 发表于 2026-6-13 22:21
这个n,是编译期常量还是变量?
如果n是编译期常量,对于 x mod n 这种语句,编译器会自动优化为移位和加 ...

大佬还在坚守论坛么。。有好多技术达人都不在论坛了,可惜了
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1|闽公网安备35020302032614号 )

GMT+8, 2026-6-14 02:16

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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