amosk: (Pheebs shocked)
[personal profile] amosk
До оптимизации:
do {                          
    *to = *from++;            
} while (--count > 0);
После оптимизации:
 int n = (count + 7) / 8;
switch (count % 8) {
case 0: do { *to = *from++;
case 7:      *to = *from++;
case 6:      *to = *from++;
case 5:      *to = *from++;
case 4:      *to = *from++;
case 3:      *to = *from++;
case 2:      *to = *from++;
case 1:      *to = *from++;
             } while (--n > 0);
}
Смысл оптимизации здесь - уменьшить кол-во итераций цикла, тем самым уменьшив число сравнений (прием называется Размотка цикла).

Но для меня интересно здесь другое, а именно переплетение switch {} и do {}. Я и не догадывался, что стандарт C позволяет внутри switch писать структуры с вложенностью и помещать метки case  перед любыми их операторами на любом уровне вложенности, а не только непосредственно под switch.

Правда сам я написал бы подобный код только за очень большие деньги. Такие, чтобы я мог до конца жизни больше не писать программы :).

Ыкс: http://en.wikipedia.org/wiki/Duffs_device
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

amosk: (Default)
amosk

December 2016

S M T W T F S
    123
45678910
11121314151617
18192021222324
252627 28293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 20th, 2025 12:40 am
Powered by Dreamwidth Studios