V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nnegier
V2EX  ›  程序员

在 C 中,数字"大于"或"小于"比较是不是比"不等于"比较运算效率要高些?

  •  
  •   nnegier · 1 天前 · 1683 次点击
    11 条回复    2024-12-04 15:44:56 +08:00
    glacer
        2
    glacer  
       1 天前
    大于小于不等于都有对应的汇编指令,都是一个 cpu 指令操作,理论上效率一样。
    chendy
        3
    chendy  
       1 天前
    @xtreme1 唤醒了十多年前汇编课程上用汇编写排序的痛苦回忆
    InkStone
        4
    InkStone  
       22 小时 54 分钟前   ❤️ 1
    这种简单的数字比较的效率就操心了,常见编译器都会给你优化好的。

    按语义写就行了
    FYFX
        5
    FYFX  
       22 小时 41 分钟前
    没啥区别吧,x86 应该都是 cmp ,cmp 就是做减法然后检查 flag
    billccn
        6
    billccn  
       22 小时 10 分钟前
    大多数构架上只有和 0 比较的操作比非 0 的要省一个减法,其他不管是那种比较耗时都是一模一样的。另外比较操作属于 ALU 执行的,通常就一个时钟周期,这个和比较后面要进行的分支相比属于小巫见大巫,不要去想着优化比较。
    009694
        7
    009694  
       19 小时 53 分钟前 via iPhone
    我感觉当你真需要考虑比较大于和大于等于效率问题的时候 你的代码甚至不应该用 c 了
    yankebupt
        8
    yankebupt  
       19 小时 38 分钟前   ❤️ 1
    汇编有 JNZ
    其实 1 楼说得好,分支才是要考虑的
    关键是跳转,如果跳转分支预测的 cache miss 了,会打断流水线 cpu 去欻欻外层 cache 读数据读指令(你用 C 一般程序不大还好,要是要去内存读东西那就不是几个时钟周期能解决的问题了,非常惨),一堆时钟周期就这么出去了……
    aminobody
        9
    aminobody  
       19 小时 30 分钟前
    没区别, 请见汇编
    https://godbolt.org/z/bdMzh6j9K
    tianshilei1992
        10
    tianshilei1992  
       6 小时 24 分钟前
    compiler 会优化的,所以无需担心这种问题
    Austaras
        11
    Austaras  
       57 分钟前
    sufficiently smart compiler.jpg
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5437 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 08:41 · PVG 16:41 · LAX 00:41 · JFK 03:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.