Все гораздо сложнее.
Например, во многих случаях скорость выполнения зависит от памяти.В качестве практического примера некоторый код может обрабатывать пиксели изображения сначала в строках, а затем в столбцах ... другой код может быть более сложным, но обрабатывать строки и столбцы одновременно.
Вторая версиямог выполнять больше инструкций из-за более сложной обработки данных, но я не удивлюсь, если бы это было быстрее из-за того, как организована память: чтение изображения по одному столбцу за раз приводит к «очистке кеша», и это очень возможночто, несмотря на свою простоту, код, работающий таким образом, может быть НАМНОГО медленнее, чем более сложный, выполняющий обработку дружественным для памяти способом.Более простой код может в конечном итоге «затормозиться», ожидая, пока строки кэша не будут заполнены или сброшены во внешнюю память.
Это всего лишь пример, но в действительности то, что происходит внутри ЦП, когда кодвыполняется для многих мощных процессоров сегодня очень и очень сложный процесс: инструкции разбиваются на микроинструкции, регистры переименовываются, происходит умозрительное выполнение частей кода в зависимости от того, что предсказатели переходов предполагают даже до того, как счетчик программы действительно достигнет определенной инструкции искоро.Сегодня единственный способ узнать наверняка, быстрее или медленнее что-то, - это во многих случаях просто попытаться использовать реальные данные и измерения.