Веселые [или не очень веселые] оптимизации кода - PullRequest
3 голосов
/ 28 ноября 2008

Рэймонд Чен может сказать об этом в своей недавней публикации по оптимизации кода ... Очевидные оптимизации - те, которые требуют оптимизации - имеют тенденцию быть "де-оптимизацией", если учесть все, что нужно считаться ...

Я уверен, что вы наверняка сталкивались / даже закодировали оптимизацию, которая вас смутила после того, как вы узнали больше ...

Хотите поделиться?

Ответы [ 4 ]

10 голосов
/ 28 ноября 2008

Устройство Даффа , которое настолько искажено, что кажется, что оно даже не должно компилироваться в ISO C:

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);
}
6 голосов
/ 28 ноября 2008

Мой любимый пример - алгоритм обмена * XOR :

// swap these two values:
int x = 4;
int y = 2;
// original:
int temp = x;
x = y;
y = temp;
// optimized version:
x ^= y;
y ^= x;
x ^= y;

Да, он не использует временную переменную и обычно может быть выполнен за три такта процессора, но это точно не очевидно, что он делает!

5 голосов
/ 28 ноября 2008

Мой любимый это

// original code
int a[10];
a[5] = 3;

// optimized code
int a[10];
*(a + 5) = 3;

Да, внезапно, это волшебно быстрее !! </sarcasm>

2 голосов
/ 28 ноября 2008

См. Также этот вопрос .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...