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

时间:2016-01-28 14:01:17

标签: arithmetic-expressions processing-efficiency

好的,所以在编写代码时,我脑海中浮现出一个问题。 CPU是否计算此<​​/ p>

gap = (gap*3) + 1;

与没有括号的以下表达式具有相同的效率?

gap = gap*3 + 1;

更新以澄清:

通常在编写算术表达式时,我们倾向于添加括号以使代码更易于阅读,即使括号不会更改表达式求值的内容。所以问题是,添加这样的括号是否会对性能产生任何影响?

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.|