★★★关于语句速度优化的问题,请高手赐教!★★★

crossbow 2003-10-20 11:29:26
请高手赐教:

if x <= y + 1 then
//...

if x < y + 2 then
//...

在Object Pascal编译器中这两个语句哪一个速度更快?依据是什么?如果能用汇编讲解更好,谢谢!
...全文
28 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
crossbow 2003-10-22
  • 打赏
  • 举报
回复
谢谢!我实在太差,还需要实实在在地好好学习...

感谢ehom老大!
ehom 2003-10-21
  • 打赏
  • 举报
回复
在可以比较的范围内,基本可以肯定一样

add edx, $02

inc edx
的执行时钟周期都为1

指令长度分别为3和1,影响忽略不计

指令之间均不能配对

不过,为什么要这么比较?
ly_liuyang 2003-10-21
  • 打赏
  • 举报
回复
结果是 maozefa(之源)所说的

最好看CPU Window下的代码,看看ASM代码就知道了,

优化在现在的系统中基本上由编译器完成,开发人员的算法高效是关键,不必太看重这类问题,除非你要的代码很讲究效率,这时建议使用BASM,不要用PascalCode了
阿发伯 2003-10-21
  • 打赏
  • 举报
回复
补充声明:以上是我随意想的,如果我用汇编,肯定是类似代码,我想Delphi编译器不会比我笨吧!
ehom 2003-10-21
  • 打赏
  • 举报
回复
mov eax, 00000000h

如果是编译结果当然是5字节,00000000就占了四字节啊

一样快,这里只需要考虑时钟周期,这已经是CPU计算机时间的最小单位了
ehom 2003-10-21
  • 打赏
  • 举报
回复
这不需要理由吧
crossbow 2003-10-21
  • 打赏
  • 举报
回复
那inc edx为什么不是2个字节?谢谢!
crossbow 2003-10-21
  • 打赏
  • 举报
回复
谢谢各位老大的参与,我看了一下Delphi的CPU窗口,两种情况分别为:

inc edx ;一个字节
cmp eax,edx
jnle xxxxxx

add edx,$02 ;两个字节/3个字节?
cmp eax,edx
jnl xxxxxx

结论:我觉得第一种快

另还有一个问题:

mov eax, 00000000h

这句指令占几个字节?书上写5个字节,我不明白,请赐教!
ehom 2003-10-21
  • 打赏
  • 举报
回复
3字节

83C202

后面是寄存器才可能是两字节
SwordGrass 2003-10-21
  • 打赏
  • 举报
回复
gz
crossbow 2003-10-21
  • 打赏
  • 举报
回复
add edx,$02 是两个字节还是3个字节呢?谢谢!
阿发伯 2003-10-20
  • 打赏
  • 举报
回复
第一句应该快一点,理由是:
当<=和<的条件不满足时,分别使用ja和jae跳转,ja,jae的机器码长度相等,而y+1和y+2可能分别用如下代码:
mov eax, y
inc eax

mov eax, y
add eax, 2
很显然inc eax比add eax,2机器码短而且执行效率高多了。
gx 2003-10-20
  • 打赏
  • 举报
回复
gz

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧