添加括号的额外计算步骤?
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.|
好的,所以在编写一些代码时我的脑海中突然出现了一个问题。 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.|