gpt4 book ai didi

c++ - 长行整数运算

转载 作者:搜寻专家 更新时间:2023-10-30 23:49:36 25 4
gpt4 key购买 nike

我的问题分为两部分。哪个更有效/更快:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com