Я нарвался на загадку, которую описал здесь: Программа работала со структурами, но я её упростил ещё сильнее, с тем же результатом: Ссылка на онлайн-компилятор языка C текстом программы Здесь просто две переменные, которые модифицируются обе в первом цикле (характер модификации роли не играет, хоть делить, хоть умножать, что угодно). Во втором цикле точно так же модифицируется только одна переменная, но дважды. Результат: второй цикл работает в два раза медленнее. Чтобы исключить влияние оптимизации, проверим ассемблерный код первого цикла: И второго цикла: -8[rbp] это счётчик цикла i, -1[rbp] это переменная a, -2[rbp] это переменная b. Операция умножения на 2 здесь заменена битовым сдвигом влево (SAL, Shift Arithmetic Left). Как видим, эти два цикла состоят из полностью идентичных операций. Разница лишь в том, что первый цикл обращается к -1[rbp] и -2[rbp], а второй цикл только к -2[rbp], но 2 раза. Далее можно сделать несколько предположений. Может быть, надо поменять местами циклы?