Что дороже, сравнение или назначение? - PullRequest
15 голосов
/ 09 марта 2009

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

Ответы [ 2 ]

9 голосов
/ 09 марта 2009

Что вы думаете?

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

Но почему тебя это должно волновать? Вы не должны заботиться о производительности на этом уровне. Оптимизировать для Big-O

6 голосов
/ 09 марта 2009

Микрооптимизация - почти всегда неправильная вещь. Даже не запускайте его, если программа не запускается слишком медленно, и вы используете профилировщик, чтобы точно определить, где находятся медленные части.

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

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

Итак, что вы подразумеваете под сравнением? Условные переходы создают проблемы любому неопределенно современному процессору, но разные процессоры делают разные вещи, и нет никакой гарантии, что какой-либо из них замедлит работу. Кроме того, если любой из них приводит к отсутствию кэша, это, вероятно, медленнее, несмотря ни на что.

Наконец, языки обычно компилируются в машинный код, и простые вещи, такие как сравнения и назначения, обычно компилируются одинаково. Большая разница будет в типе процессора.

...