2015-09-07 70 views
-11
int a=1,b=2; 
int c=29464,d=347653; 

有两种操作op1op2算术运算时间用C

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

哪个操作需要多长时间?

+2

你应该已经谈到这里代码的复杂性,而不是执行时间!在完美(无偏)的环境中,两者都是O(1)。 –

+0

恕我直言,双方将导致相同的汇编指令,64位CPU可以在同一时间,我会承担添加任何64位数字。 –

+0

16位架构或更低,将会快于2.在大多数人是一样 –

回答

4

在带有“常规”编译器的“常规”CPU上,根据原则,它们将采用完全相同的时间(通常,两个原始大小的寄存器之间的add采用相同的时间,而不考虑操作数值) 。

OTOH在现代CPU上很难测量指令所花费的时间,因为实际的吞吐量在很大程度上取决于管道的状态,如果存在数据依赖性,如果分支预测器正确猜测和什么。所以,如果出于某种奇怪的原因,操作具有某种数据相关的(比如,中a值在条件语句改变),或者 - 上帝保佑它 - 必须从存储器中取出(=>进入高速缓存机械)是一个完全不同的游戏,唯一安全的选择就是衡量它。

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