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

Есть две операции op1 и op2:Арифметические операции время в C

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

Какая операция занимает больше времени?

+2

Вы должны были поговорить о сложности кода здесь, вместо времени выполнения! В идеальной (беспристрастной) среде оба будут O (1). –

+0

IMHO Оба приведут к одной и той же инструкции ассемблера, и 64-битный процессор может добавить любое 64-битное число в то же время, я предполагаю. –

+0

на 16-битной архитектуре или меньше, 1 будет быстрее, чем 2. На большинстве других это то же самое –

ответ

4

На «обычном» процессоре с «обычным» компилятором, в принципе, оба они будут выполнять одинаковое время (обычно add между двумя регистрами собственного размера принимает одно и то же время независимо от значений операнда) ,

Ото, на современных процессорах это довольно трудно измерить время, затраченное на конкретной инструкции, так как фактические пропускная способность в значительной степени зависит от состояния трубопровода, если есть зависимость по данным, если ветвь предсказатель правильно угадывает и все. Итак, если эта операция для какой-то причудливой причины имеет какую-то зависимость от данных (скажем, значение a изменяется в условном выражении) или - не дай бог - должно быть извлечено из памяти (=> введите механизм кэширования) совершенно другая игра, и единственная безопасная ставка - это ее измерение.

Но, скорее всего, обе операции потребуют ровно нулевого времени; любой современный компилятор с включенными оптимизациями будет выполнять постоянное размножение и складывание выражений, поэтому исполняемый файл вывода будет просто иметь результаты ваших операций, встроенных в испускаемые инструкции, в качестве непосредственных значений.

Смежные вопросы