2017-02-06 10 views
-11

Как, скажем, у вас есть переменная c, которая, благодаря оптимизации процессора, можно смело предположить, что она хранится в регистре. Что из следующего быстрее?Является ли немедленная адресация быстрее, чем доступ к регистру?

c = getchar(); 
if(c == 033){ 
    putchar(033); 
    … 
} 

или

c = getchar(); 
if(c == 033){ 
    putchar(c); 
    … 
} 

Я предполагаю, что первый из них будет быстрее, так как он использует непосредственный адресации, а не доступа к регистру. Правильно ли мое предположение?

+7

Вы должны предположить, что компилятор будет генерировать один и тот же код для обоих, используя то, что имеет непосредственную или регистрационную адресацию быстрее. Вы не должны беспокоиться об этом. В этом случае я бы написал 'putchar (c)', потому что, по-моему, код более читабельен в целом таким образом, но разумные люди могут не согласиться. Это также было бы более читаемым, если бы вы не использовали восьмеричные и не помещали пробелы внутри своих круглых скобок. – zwol

+2

Посмотрите на разборку. Мне действительно было бы безразлично разницу. –

+2

Я бы запустил точный бенчмаркер и проверил их. – Carcigenicate

ответ

0

Это не будет иметь большого значения, поскольку это всего лишь фрагмент. Скорее я бы сказал, что это будет работать лучше, когда мы напишем putchar (c), так как это то, что готовит компилятор, чтобы понять больше.

0

Это сильно зависит от набора команд и непосредственного регистра vs, регистр, вероятно, немного медленнее, чем часы или два, поскольку вам нужно немедленно или загрузить его, чтобы попасть в регистр. Где с немедленным он находится в инструкции, если набор инструкций не является переменной длиной и может стоить вам циклов инструкций.

Путчар все равно будет болотовать, от сотен до тысяч тактов по сравнению с теми или иными, которые вы пытаетесь сохранить здесь.

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