添加括号的额外计算步骤?

Extra computation steps on adding brackets?

好的,所以在编写一些代码时我的脑海中突然出现了一个问题。 CPU 是否计算此

gap = (gap*3) + 1;

与下面不带括号的表达式的效率相同?

gap = gap*3 + 1;

更新更清楚:

通常在编写算术表达式时,我们倾向于添加括号以使代码更易于阅读,即使括号不会改变表达式的计算结果。那么问题来了,添加这样的括号对性能有影响吗?

如上评论所述:

文件test1.c:

int main(void)
{
    int gap = 1;
    gap = (gap*3) + 1;
    return gap;
}

文件test2.c:

int main(void)
{
    int gap = 1;
    gap = gap*3 + 1;
    return gap;
}

使用 gcc 及其 -S 选项 ("Compile only; do not assemble or link"):gcc -S test1.c && gcc -S test2.c。比较这两个文件:

$ diff test1.s test2.s
1c1
<   .file   "test1.c"
---
>   .file   "test2.c"

(即只有第一行的文件名不同)

当你还是不相信我的时候(对于这个特定的例子),那么你可以进一步编译 & assemble: gcc test1.c -o test1 && gcc test2.c -o test2。比较那些二进制文件(或者更确切地说是 ELF 可执行文件)会给你一个字节的差异,即文件名再次:

$ hexdump -C test1 > hex1.txt && hexdump -C test2 > hex2.txt
$ diff hex1.txt hex2.txt 
387c387
< 00001fc0  79 5f 65 6e 74 72 79 00  74 65 73 74 31 2e 63 00  |y_entry.test1.c.|
---
> 00001fc0  79 5f 65 6e 74 72 79 00  74 65 73 74 32 2e 63 00  |y_entry.test2.c.|