在一些特定的使用中, i++ 可能将原值用中间量存起来以待使用,下面看相关程序的汇编代码(使用 gcc )。

  • i++ 源程序:
#include <stdio.h>

int main(){

    int i = 1;

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

    return 0;

}
  • i++ 汇编:
main:

.LFB0:
    .cfi_startproc
    endbr64
    pushq   %rbp
    .cfi_def_cfa_offset 16
    .cfi_offset 6, -16
    movq    %rsp, %rbp
    .cfi_def_cfa_register 6
    subq    $16, %rsp
    movl    $1, -4(%rbp) //将i赋值为1.
    movl    -4(%rbp), %eax //将i的原值转移到中间变量
    leal    1(%rax), %edx //将%edx赋值为i+1
    movl    %edx, -4(%rbp)//i的值改变
    movl    %eax, %esi //对原来i的值进行打印操作
    leaq    .LC0(%rip), %rax
    movq    %rax, %rdi
    movl    $0, %eax
    call    printf@PLT
    movl    $0, %eax
    leave
    .cfi_def_cfa 7, 8
    ret
    .cfi_endproc

再来看相同操作 ++i

  • ++i 的源程序:
#include <stdio.h>

int main(){

    int i = 1;

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

}
  • ++i 汇编:
main:

.LFB0:
    .cfi_startproc
    endbr64
    pushq   %rbp
    .cfi_def_cfa_offset 16
    .cfi_offset 6, -16
    movq    %rsp, %rbp
    .cfi_def_cfa_register 6
    subq    $16, %rsp
    movl    $1, -4(%rbp) //对i进行赋值。
    addl    $1, -4(%rbp) //i的值加一。
    movl    -4(%rbp), %eax //对i的值进行打印操作。
    movl    %eax, %esi
    leaq    .LC0(%rip), %rax
    movq    %rax, %rdi
    movl    $0, %eax
    call    printf@PLT
    movl    $0, %eax
    leave
    .cfi_def_cfa 7, 8
    ret
    .cfi_endproc

++i与i++在效率上的细微差别的更多相关文章

  1. 继承Object和ContextBoundObject处理效率上的差距

    继承Object和ContextBoundObject处理效率上的差距 ContextBoundObject一个很熟悉的对象,它提供对象有处理上下文的能力:通过它能够方便地实现AOP处理机制.它带来好 ...

  2. AI 的下一个重大挑战:理解语言的细微差别

    简评:人类语言非常博大精妙,同一句话在不同的语境下,就有不同的含义.连人类有时候都不能辨别其中细微的差别,机器能吗?这就是人工智能的下一个巨大挑战:理解语言的细微差别.本文原作者是 Salesforc ...

  3. FDD-LTE上下行带宽一样的,为什么上下行流量差别这么大

    转:https://zhidao.baidu.com/question/923940070377297579.html 虽然FD系统,上下行使用的带宽一样,但是上下行的信号编码效率完全不同.上行信号( ...

  4. 如何比较两个txt文件内容的细微差别

    如何比较两个txt文件内容的细微差别 https://jingyan.baidu.com/article/19020a0a1dd04a529c284272.html 听语音 | 浏览:3500 | 更 ...

  5. JSP页面小脚本实现日期比較,Java同理,精简过后的,可能在效率上不太好,有大大能够给优化下就更好了

    <%         java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("yyyy-MM-dd ...

  6. 写给java程序员的c++与java实现的一些重要细微差别

    0.其实常规的逻辑判断结构.工具类.文件读写.控制台读写这些的关系都不大,熟悉之后,这些都是灵活运用的问题. 学习c/c++需要预先知道的一个前提就是,虽然有ANSI C标准,但是每个c/c++编译器 ...

  7. c++编程和c在思想上最大的差别

    从正规的血统上来说,c++跟java一样是面向对象编程语言,而c是面向结构的编程语言.但是,在现实中,有大量的系统虽然用cpp编写,但是100%跟java一样,使用面向对象的几乎没有,绝大部分都是结合 ...

  8. 写给java程序员的c++与java实现的一些重要细微差别-附完整版pdf学习手册

    0.其实常规的逻辑判断结构.工具类.文件读写.控制台读写这些的关系都不大,熟悉之后,这些都是灵活运用的问题. 学习c/c++需要预先知道的一个前提就是,虽然有ANSI C标准,但是每个c/c++编译器 ...

  9. IIS6与IIS7在编程实现HTTPS绑定时的细微差别

    本文章其实最主要信息是: 问题出在那个小小的*号上——IIS6中不支持通配符,第一部分为空时表示(All Unsigned),而IIS7中同时支持空或通配符的写法,如果为空则自动转为*:443:,我们 ...

  10. c语言中:strlen和sizeof的区别和它们分别交换各自作用领域(\0问题)时的细微差别!!!

    本人c语言初学菜鸟一枚,今天通过敲了一段简单代码,发现strlen和sizeof之间的一些关系,总结如下: 用strlen计算数组长度要考虑进去\0 用sizeof计算字符串长度也要考虑进去\0 而s ...

随机推荐

  1. 顺序表_C

    // Code file created by C Code Develop #include "ccd.h" #include "stdio.h" #incl ...

  2. ABC354

    A link 模拟整个过程即可. 点击查看代码 #include<bits/stdc++.h> #define int long long using namespace std; sig ...

  3. CSP2023-J/S 游记

    本人 初二 \(\texttt{HA}\) CSP2023 成绩: CSP-J 第一轮:\(86.5\) CSP-S 第一轮:\(41.5\) CSP-J 第二轮:\(100+100+100+0=30 ...

  4. Charles 4.6 小茶杯 网络抓包工具

    下载官网: https://www.charlesproxy.com/download 破解网站: Charles破解工具 (zzzmode.com)

  5. 【Redis】05 持久化

    持久化概述 Redis提供了不同的持久性选项: 1.RDB持久性按指定的时间间隔执行数据集的时间点快照. 2.AOF持久性会记录服务器接收的每个写入操作,这些操作将在服务器启动时再次播放,以重建原始数 ...

  6. 循环神经网络 —— LSTM 有状态模型(stateful LSTM)和无状态模型(stateless LSTM)

    相关参考: 训练后的LSTM模型在进行预测时的初始h_n和c_n是什么或应该怎么设置? Keras中对RNN网络的statefull和stateless设置: 链接:https://keras.io/ ...

  7. 不符合自身利益的科学讨论是否应该得到尊重—— 读《自家员工质疑Jeff Dean领衔的Nature论文被解雇,谷歌:我们彻查了,质疑不符合标准》有感

    读了一篇博文<自家员工质疑Jeff Dean领衔的Nature论文被解雇,谷歌:我们彻查了,质疑不符合标准>,其问大致是说Google提了一篇使用reinforcement learnin ...

  8. Python语言中当前工作目录(Current Working Directory, cwd)与模块搜索第一路径都是指什么???

    相关: 查看并添加python中库的搜索路径 [python]自问自答:python -m参数? ( python3.7 版本 ) 本文主要解释Python语言中的两个基本概念: 当前工作目录(Cur ...

  9. Turbo Sparse:关于LLM稀疏性的探索

    本文地址:https://www.cnblogs.com/wanger-sjtu/p/18352898 关于llama稀疏性的观察 llama原始模型的FFN计算过程为: \[f(x) = \text ...

  10. 【SpringCloud学习笔记(一)】搭建一套环境

    学习的目的 最近做的项目中用到了Spring Cloud,为了能够更好的做好项目,自然少不了去研究一下Spring Cloud. 我的计划是结合一些书本和课程,自己写一点简单的Demo代码,验证Spr ...