Я знаю, что это довольно давно, но здесь есть реализация подпроцедуры из heapsort, в которой использование переменных реестра ускоряет алгоритм, по крайней мере, с помощью gcc 4.5.2 для компиляции кода
inline void max_heapify(int *H, int i){
char OK = FALSE;
register int l, r, max, hI;
while(!OK){
OK = TRUE;
l = left(i);
r = right(i);
max = i;
if(l <= H[SIZE] && H[l] > H[i]){
max = l;
}
if(r <= H[SIZE] && H[r] > H[max]){
max = r;
}
if(max != i){
OK = FALSE;
hI = H[i];
H[i] = H[max];
H[max] = hI;
i = max;
}
}
}
Я протестировал алгоритм с и без ключевого слова register перед атрибутами и выполнил его, чтобы отсортировать случайный массив с 50 000 000 элементов в моей записной книжке, несколько раз для каждой версии.
использование регистров сократило время сортировки с ~ 135 с до ~ 125 с.
Я также протестировал только 5 000 000 элементов, но выполнил его несколько раз.
Версия без регистра начиналась в 11 с, но каждое исполнение уменьшало время до 9,65 с и останавливалось на этом
версия с регистром началась в 10 секунд и снизила время до 8,80 секунд.
Я думаю, это как-то связано с кеш-памятью. Тем не менее, кажется, что регистры ускоряют алгоритм благодаря постоянному коэффициенту
Поскольку эти переменные довольно часто используются в алгоритме, то, гарантируя, что они находятся в регистре, вместо того, чтобы оставлять эту работу компилятору, в этом случае был достигнут лучший результат. Однако это не сильно улучшило время.
Надеюсь, это кому-нибудь пригодится, привет.