美文网首页
编程循环结构中<与!=的效率比较

编程循环结构中<与!=的效率比较

作者: czs_0_0_0_0 | 来源:发表于2019-01-02 14:59 被阅读0次

记得以前好像是在某个国外的wiki上看到在for循环中用“!=”比用“<”可以带来更好的性能,从那以后是深信不疑一直用不等于来做循环的判断,知道近期学了汇编之后才了解到这个说法并不完全准确。真正的结论是这两个比较方法效率上差不多。

我自己先弄了以下这个测试的C的代码,内容很简单,分别写了两个for循环,一个用不等于做判断,另一个用小于做判断。


#include <stdio.h>

int main() {

    int i;

    for (i = 0; i < 5; i++) {

        printf("< %d\n", i);

    }

    for (i = 0; i != 5; i++) {

        printf("!= %d\n", i);

    }

    return 0;

}

先编译成一个可执行文件后,用反汇编工具进行反汇编,通过查看汇编的源码可知不等于和小于的比较用的都是CMP指令,通过把栈里两个数相减来判断标志寄存器的状态。唯一的区别在于CMP后面跟了判断什么标志位的指令,其实后续具体跟了什么指令和编译器的做法有关,我试了一下在windows上和mac上是略微有些区别的。

windows的情况下小于的判断使用JLE指令,而不等于的判断使用的是JNZ指令,JNZ指令判断标志寄存器的ZF标志位是否为0,两个数的差如果为0的话ZF标志位为1;而JLE其实是小于等于判断,编译器优化为判断小于等于4了,除了看ZF标志位以外还要看SF和OF的标志位,通过查看两个数的差是正是负以及是否有溢出来判断大小。

相关文章

  • 编程循环结构中<与!=的效率比较

    记得以前好像是在某个国外的wiki上看到在for循环中用“!=”比用“<”可以带来更好的性能,从那以后是深信不疑一...

  • for循环与forEach等循环效率比较

    网上总是在鄙视for循环,太low拉,怎么怎么样。用forEach,filter,map。。。。。等等。 但是fo...

  • Python的判断结构和循环结构

    判断结构和循环结构是编程语言最基本的控制结构,其语法格式在各个编程语言中也是大同小异。与java相比,python...

  • Python | While循环控制语句

    掌握while循环的结构以及循环中的常用关键字。 一、While循环控制语句 ● Python编程中while语句...

  • 3.7.4for循环

    1.什么是for循环循环也是Java语言中一种处理循环的编程结构。一般程序员比较习惯使用for循环语法为: for...

  • xdl2

    指令式编程 顺序结构 分支结构 循环结构 变量作用域

  • 数据结构

    结构化编程:顺序结构、选择结构、循环结构哈希表(key:value)* 计数排序中的桶(复杂度 O(n+max...

  • 编程语言基础python之流程控制

    在编程中,程序执行结构流程有三种:顺序结构、选择结构和循环结构。 顺序结构:代码从上往下依次执行分支结构:根据不同...

  • Kotlin——流程控制

    与Java类似,Kotlin同样提供了两种基本的流程控制结构:分支结构和循环结构 顺序结构 在任何编程语言中最常见...

  • (旧)C语言--循环语句

    之前,我们讲过了编程中的三种结构(顺序、条件、循环),现在我们来看一下循环语句如何编写。 一、while循环语句(...

网友评论

      本文标题:编程循环结构中<与!=的效率比较

      本文链接:https://www.haomeiwen.com/subject/tkuzlqtx.html