// This program does not uses loop unrolling. #include int main(void) { for (int i=0; i<5; i++) printf('Hellon'); //print hello 5 times return 0; }
Програма 2: CPP // This program uses loop unrolling. #include int main(void) { // unrolled the for loop in program 1 printf('Hellon'); printf('Hellon'); printf('Hellon'); printf('Hellon'); printf('Hellon'); return 0; }
Output: Hello Hello Hello Hello HelloІлюстрація: Програма 2 ефективніша за програму 1, тому що в програмі 1 потрібно перевіряти значення i та збільшувати значення i кожного разу в циклі. Таким чином, невеликі цикли, як цей, або цикли з фіксованою кількістю ітерацій можуть бути повністю розгорнуті, щоб зменшити накладні витрати циклу.
Переваги:
- Підвищує ефективність програми.
- Зменшує витрати циклу.
- Якщо оператори в циклі не залежать один від одного, вони можуть виконуватися паралельно.
Недоліки:
- Збільшений розмір програмного коду, що може бути небажаним.
- Можливе збільшення використання реєстру в одній ітерації для зберігання тимчасових змінних, що може знизити продуктивність.
- Крім дуже маленьких і простих кодів, розгорнуті цикли, які містять гілки, навіть повільніші, ніж рекурсії.