0 / 0 / 0
Регистрация: 23.05.2015
Сообщений: 10
|
|||||||||||
1 | |||||||||||
Оптимизация цикла for23.04.2016, 06:43. Показов 3341. Ответов 11
Метки нет (Все метки)
Скажите, пожалуйста, как оптимизируется первый цикл? И чем он отличается от второго?
Первый цикл:
0
|
23.04.2016, 06:43 | |
Ответы с готовыми решениями:
11
Оптимизация цикла for Оптимизация условия цикла while Оптимизация цикла по скорости Оптимизация цикла (перебор 5000000 элементов) |
0 / 0 / 0
Регистрация: 23.05.2015
Сообщений: 10
|
|
24.04.2016, 12:42 [ТС] | 3 |
То есть почему компилятор удаляет этот участок кода из ассемблерного? И чем одна оптимизация хуже другой?
0
|
7791 / 6558 / 2984
Регистрация: 14.04.2014
Сообщений: 28,667
|
|
24.04.2016, 12:44 | 4 |
Потому что результат вычислений постоянный.
1
|
24.04.2016, 13:25 | 5 |
Данный код (точнее, оба кода) написаны так, что содержат избыточность. Современные компиляторы в состоянии её удалить. Это общий принцип построения компиляторов. Программист пишет код, компилятор пытается его строить наиболее эффективным образом
0
|
0 / 0 / 0
Регистрация: 03.02.2016
Сообщений: 3
|
|
24.04.2016, 14:35 | 6 |
Так а в чём разница между первой и второй оптимизацией? Чем отличается опт, когда мы пишем напрямую и когда мы пишем через с1 и с2?
0
|
7791 / 6558 / 2984
Регистрация: 14.04.2014
Сообщений: 28,667
|
|
24.04.2016, 14:37 | 7 |
Какой ответ ты хочешь услышать? Ничем она не отличается, просто второй вариант посложнее.
0
|
0 / 0 / 0
Регистрация: 03.02.2016
Сообщений: 3
|
|
24.04.2016, 15:55 | 8 |
Вот то же самое было сказано преподавателю. Ответом он явно не был доволен(.
0
|
24.04.2016, 16:05 | 9 |
В первом случае выполняется только одна оптимизация (грубо говоря, вычисление переменной "a"), во втором случае - две (ещё и замена границ цикла на константы)
Как показывает жизненный опыт, в 99% случаев утверждения типа "я вот тоже самое сказал(а) преподавателю" не соответствуют действительности Всё зависит от преподавателя. Многим нужно отвечать именно то, о чём было сказано на лекциях (стандартный бестолковый преподаватель)
2
|
7791 / 6558 / 2984
Регистрация: 14.04.2014
Сообщений: 28,667
|
|
24.04.2016, 16:25 | 10 |
Constant propagation (Распространение констант) во втором случае, и в обоих что-то типа размотки цикла. Тут я не уверен.
Добавлено через 3 минуты Как предмет называется? Теория компиляторов?
0
|
0 / 0 / 0
Регистрация: 03.02.2016
Сообщений: 3
|
|
24.04.2016, 18:28 | 11 |
Теория языков программирования и методы трансляции. По сути, мы там пишем компилятор. Вот и должны разбираться в таких мелочах.
Преподавателю просто сказала, что особой разницы нет. Лучше бы я молчала). Есть еще такой вариант ответа (насчет разности этих 2х ф-ий) , но немного сомневаюсь: Во втором случае мы не знаем, изменил ли какое-нибудь значение программист, а в первом случае, вставь код хоть куда и он везде покажет одинаковое значение.
0
|
24.04.2016, 18:42 | 12 |
Естественно, что во втором случае, если между 2-й и 3-й строкой воткнуть код, то можно исходник привести к виду, на котором оптимизация не отработает (не сможет вычислить конкретные значения c1 и c2 на момент работы цикла for). Возможно, препод это имел в виду. Но тогда вопросы надо ставить более конкретно
Кстати, ответ "Ничем она не отличается, просто второй вариант посложнее" из поста #7 можно считать не правильным. Автор имел в виду, что итоговый код ничем не отличается. Оптимизации, разумеется отличаются, по составу (посты #9 и #10)
1
|
24.04.2016, 18:42 | |
24.04.2016, 18:42 | |
Помогаю со студенческими работами здесь
12
Применение цикла if для определения простых чисел. If внутри цикла for Используя одну переменную цикла укажите возможные способы объявления заголовка счетного цикла. вывод на экран чисел 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12, с использованием одного цикла и что бы все printf были только в теле цикла Нахождение отрицательного цикла в графе и вывод цикла Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |