如果不使用结果值,则i++++i之间是否存在性能差异?

推荐答案

执行摘要:否.

i++可能比++i慢,因为原来的值是i

我们可以通过查看此函数的代码来演示这一点,

$ cat i++.c
extern void g(int i);
void f()
{
    int i;

    for (i = 0; i < 100; i++)
        g(i);

}

除了++ii++之外,文件是相同的:

$ diff i++.c ++i.c
6c6
<     for (i = 0; i < 100; i++)
---
>     for (i = 0; i < 100; ++i)

我们将编译它们,并获得生成的汇编程序:

$ gcc -c i++.c ++i.c
$ gcc -S i++.c ++i.c

我们可以看到生成的对象和汇编程序文件是相同的.

$ md5 i++.s ++i.s
MD5 (i++.s) = 90f620dda862cd0205cd5db1f2c8c06e
MD5 (++i.s) = 90f620dda862cd0205cd5db1f2c8c06e

$ md5 *.o
MD5 (++i.o) = dd3ef1408d3a9e4287facccec53f7d22
MD5 (i++.o) = dd3ef1408d3a9e4287facccec53f7d22

C++相关问答推荐

XV 6中的MLFQ和RR

定义_MISIX_C_SAL时,在MacOS上编译失败,并出现奇怪错误

位屏蔽对于无符号转换是强制的吗?

正在try 将文件/文件夹名从目录 struct 存储到链接列表

在编译时参数化类型定义

非常大的数组的大小

GCC创建应用于移动项的单独位掩码的目的是什么?

Sizeof(&Q;字符串&Q;)的正确输出是什么?

插座打开MacOS组件

判断X宏的空性

为什么memcpy进入缓冲区和指向缓冲区的指针工作相同?

Kdb:仅升级指定的列

等同于铁 rust 的纯C语言S未实现!()宏

#定义SSL_CONNECTION_NO_CONST

<;unistd.h>;和<;sys/unistd.h>;之间有什么区别?

Tic-tac-toe:从文件加载存储

为什么我的半数组测试和奇数组测试不起作用?(我使用Assert进行调试)

程序对大输入给出错误答案

C语言中的指针和多维数组

在C中交换字符串和数组的通用交换函数