算术运算时间用C表示

时间:2015-09-07 12:21:35

标签: c algorithm performance time-complexity integer-arithmetic

int a=1,b=2;
int c=29464,d=347653;

有两项操作op1op2

op1: add1=a+b;
op2: add2=c+d;

哪个操作需要更多时间?

1 个答案:

答案 0 :(得分:4)

在具有“常规”编译器的“常规”CPU上,根据原则,它们都将花费完全相同的时间(通常两个本机大小的寄存器之间的add需要相同的时间,而不管操作数值)。

OTOH,在现代CPU上,很难测量特定指令所花费的时间,因为实际吞吐量在很大程度上取决于管道的状态,如果有数据依赖性,如果分支预测者正在猜测,无论如何。因此,如果由于某种奇怪的原因而进行的操作具有某种数据依赖性(例如,a的值在条件语句中被更改)或者 - 上帝禁止它 - 必须从内存中获取(=>输入缓存机制)它是一个完全不同的游戏,唯一安全的赌注是衡量它。

但最有可能的是,这两项操作都将花费零时间;任何启用了优化的现代编译器都会进行常量传播和表达式折叠,因此输出可执行文件只会将操作结果作为立即值嵌入到发出的指令中。