作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我的问题分为两部分。哪个更有效/更快:
int a,b,c,d,e,f;
int a1,b1,c1,d1,e1,f1;
int SumValue=0; // oops forgot zero
// ... define all values
SumValue=a*a1+b*b1+c*c1+d*d1+e*e1*f*f1;
或
Sumvalue+=a*a1+b*b1+c*c1;
Sumvalue+=d*d1+e*e1*f*f1;
我猜第一个是。我的第二个问题是为什么。
我想第三个问题是,在任何时候是否有必要分解一个加法运算(除了编译器对续行数等的限制......)。
编辑
当整个算术运算无法放入缓存时,我会看到唯一一次速度变慢吗?我认为这是不可能的——在这发生之前,编译器可能会对两个多行的延续感到生气。也许我明天得去玩看看。
最佳答案
你测过吗?两种方法的优化机器代码即使不相同也可能非常相似。
编辑:我刚刚对此进行了测试,结果符合我的预期:
$ gcc -O2 -S math1.c # your first approach
$ gcc -O2 -S math2.c # your second approach
$ diff -u math1.s math2.s
--- math1.s 2010-10-26 19:35:06.487021094 +0200
+++ math2.s 2010-10-26 19:35:08.918020954 +0200
@@ -1,4 +1,4 @@
- .file "math1.c"
+ .file "math2.c"
.section .rodata.str1.1,"aMS",@progbits,1
.LC0:
.string "%d\n"
就是这样。相同的机器代码。
关于c++ - 长行整数运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4020995/
我正在使用 grep 仅返回多个文件中模式 (-o) 之间的字符串,例如 grep -i -r -o 'Rows="[^#][^"]*"' * 我希望它在第一个匹配模式后停止,我试过 grep -m
我是一名优秀的程序员,十分优秀!