Некоторые методы, которые можно использовать для оптимизации бесконечных циклов:
- Ротация ветвлений. 1 Бесконечные циклы с выходом по break преобразуются в конечные циклы с постусловием. 1 При этом тело цикла как бы прокручивается, чтобы оператор break переместился на место while(1), а сам while(1) сомкнулся с оператором do и «коллапсировал». 1
- Размыкание цикла. 4 Если внутри цикла есть условный оператор if-else, и принятие решения внутри цикла происходит на каждой итерации, то можно разомкнуть цикл, приняв решение вне цикла. 4 Это позволит исключить инструкцию проверки условия при каждой итерации, если условие не изменяется во время итераций цикла. 4
- Объединение циклов. 4 Если два цикла работают с одним набором элементов, их можно объединить для устранения затрат на выполнение дополнительного цикла. 4 Важно, чтобы совпадали диапазоны изменения данных. 4
- Развёртывание цикла. 4 Количество инструкций в цикле увеличивается, то есть за одну итерацию выполняется либо несколько инструкций, либо более сложная инструкция, которая может быть разбита компилятором на несколько. 4 Это позволяет сократить затраты, связанные с выполнением цикла. 4
- Расщепление цикла. 4 Цикл разбивают на несколько циклов, при этом все эти циклы имеют одинаковые диапазоны изменения индекса, только содержат разные части тела исходного цикла. 4
Выбор метода зависит от конкретной ситуации и целей оптимизации.