嵌入式C语言语法中i++和++i的执行效率一样高吗

i++;++i;就c语言代码来看,i++ 和 ++i 都只有一行,看起来似乎二者的执行效率一样了?其实不是的,在学习c语言时,教材和老师一般都会强调 i++ 和 ++i 的区别,例如下面这段c语言代码:int i , j, k;i = 0;j = i++;i = 0;k = ++i;这段c语言代码执行后,j 和 k 的值并不相等:j 等于 0,k 等于 1。既然执行结果有差异,那么执行效率很有可能也是有差异的,事实的确如此。查看上述c语言代码对应的汇编代码,如下:
我使用的编译器为 gcc version 4.8.4。可见,j=i++; 计算机需要 4 条指令来解释,比执行 k=++i; 多出了一条指令。多出的一条指令为:在对 i 执行自加操作之前,先保存 i 的当前值留作稍后使用(赋值为j)。这样看来,似乎 ++i 的执行效率比 i++ 高一些?
那为了写出效率更高的c语言程序,以后是不是应该尽量使用 ++i,而不是 i++ 了呢?例如下面这样的c语言代码:for(i=0; i<10; i++);for(i=0; i<10; ++i);是不是上面那行c语言代码的执行效率低于下面的呢?只能说理论如此,实际上,现代c语言编译器已经足够聪明,它会根据上下文编译c语言代码。
应该明白,i++ 和 ++i 的效率差异主要来自于处理 i++ 时,需要先保存 i 的当前值留作稍后使用。如果之后没有人使用 i 的当前值,也就是说没有c语言代码读取 i++ 的值,编译器实在没有必要保存 i 的当前值了,因此就会将这一步优化掉。
为了便于分析,我们编写下面这样的c语言代码:int i = 0;i++;++i;与上面的例子相比,区别在于在执行 i++ 时,没有人关心 i 的当前值了。查看这段c语言代码对应的汇编代码:显然,i++ 和 ++i 对应的指令是一模一样的,不再有执行效率上的差异。
c语言中的 i++ 和 ++i 是有区别的,这就有可能带来效率上的差异。如果有代码关心 i++ 执行时的 i 当前值,程序在对 i 进行自加操作时,将不得不先保存 i 的当前值,而 ++i 就无需保存当前值,这就会带来效率上的差异。如果没人关心 i++ 的当前值,那么现代大多数c语言编译器将会将这一差异优化掉,此时 i++ 和 ++i 不再有效率上的差异。

微软最新的Win10 RS4快速预览版更新17133
2GB RAM树莓派4B宣布永久降价10美元 目前售价约合人民币245元
自动气象站的监测原理、设备优势及应用领域
华为鲁鸿驹:5G引领新基建,AI创造新价值
基于LabVIEW的战斗机的应用
嵌入式C语言语法中i++和++i的执行效率一样高吗
5G+云VR助力智慧教育创新发展
一加5最新消息:小米6热度未散!一加5就来搅局挑战小米6,能否成功?
4mA至20mA电流环路将消失?
新玩家们跨界参与对于整个汽车市场竞争格局会带来哪些变化?
英创信息技术ESM6802上开发Android应用程序简介
华为三款MateBook X/E/D详细评测:低于海外版本3000元!
CSR推出全球首款内置立体声DSP的ROM蓝牙解决方案,专为
每周经典电路分析:采样保持放大器(1)
华为移动路由Pro:不用办理固话宽带也能上网
Chainhop与其他互操作性解决方案的对比
TD-SCDMA:棋局当前尚留三大“疑问手”
歌尔股份2020年净利利润超28亿元 增长122%
苹果推出ios13.2系统后,都出现了哪些问题
出自大众,途昂的升级版,保时捷平台打造,35万剑指奥迪Q7