🥺 Сегодня получил интересный вопрос: что быстрее —
n++, ++n или n + 1 ?Ответ: n++ читает стек 3 раза, в то время как ++n и n + 1 — 4 раза.
Тесты были проведены на следующем коде (смотри фото):
++n и n + 1
Для
dummy = ++n и n = n + 1; dummy = n происходит следующее:> n инкрементируется на стеке
> значение n загружается в регистр
> регистр сохраняется в dummy на стеке
n++
Для
dummy = n++ происходит следующее:> n загружается в регистр-1
> регистр-1 инкрементируется и результат сохраняется в регистр-2
> регистр-2 сохраняется обратно на стек (обновлённое значение n)
> регистр-1 сохраняется на стек в dummy (исходное значение n)
Может показаться, что код для n++ содержит больше инструкций и поэтому должен быть медленнее, но это не так.
На практике не существует такого понятия, как «инкремент на стеке» — значение фактически загружается в процессор, инкрементируется там, а затем записывается обратно.
Если посчитать обращения к стеку (чтения и записи):
> ++n и n + 1: чтение, запись, чтение, запись — 4 обращения к стеку
> n++: чтение, запись, запись — 3 обращения к стеку
Поскольку чтение из регистра значительно быстрее, чем из стека, это делает n++ более быстрым вариантом.
👉Новости 👉База вопросов





