Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
strcpy(to, from, count)
register char *to, *from;
register count;
{
register n = (count + 7) / 8;
if (!count) return;
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);
}
}
Но, если это невозможно нужно постараться облегчить работу модулю предсказания переходов. Для этого разместите наиболее вероятные ветви в начале ветвления
#if defined(__GNUC__) || defined(__clang__) /* Так можно определять наличие макроса,
* но лучше это делать с помощью cmake/autoconf */
#define COMPILER_HAVE_BUILTIN_EXPECT 1
#endif
#ifdef COMPILER_HAVE_BUILTIN_EXPECT
#define likely(X) __builtin_expect((X), 1)
#define unlikely(X) __builtin_expect((X), 0)
#else
#define likely(X) (X)
#define unlikely(X) (X)
#endif
for (i = 0;; i++)
if (unlikely(i % 1000 == 0))
{
/* Менее вероятный переход */
}
else
{
/* Более вероятный переход */
}
Введение в технику оптимизации циклов