好的,所以在编写代码时,我脑海中浮现出一个问题。 CPU是否计算此</ p>
gap = (gap*3) + 1;
与没有括号的以下表达式具有相同的效率?
gap = gap*3 + 1;
更新以澄清:
通常在编写算术表达式时,我们倾向于添加括号以使代码更易于阅读,即使括号不会更改表达式求值的内容。所以问题是,添加这样的括号是否会对性能产生任何影响?
答案 0 :(得分:1)
如上所述:
file test1.c:
int main(void)
{
int gap = 1;
gap = (gap*3) + 1;
return gap;
}
file test2.c:
int main(void)
{
int gap = 1;
gap = gap*3 + 1;
return gap;
}
使用gcc
及其-S
选项(&#34;仅编译;不汇编或链接&#34;):gcc -S test1.c && gcc -S test2.c
。比较这两个文件:
$ diff test1.s test2.s
1c1
< .file "test1.c"
---
> .file "test2.c"
(即第一行只有文件名不同)
如果你仍然不相信我(对于这个特例),那么你可以进一步编译&amp;汇编: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.|