Jeśli jesteś programistą C++ i nie znasz specyfikatora ‘register’ to myślę, że warto go poznać.
Dodany do definicji obiektu ( int ) prosi kompilator o to aby umieścił dany obiekt w rejestrze procesora a nie tak jak to się dzieje zwykle do komórki pamięci.
Co to nam daje?
Dostęp do danych zawartych w rejestrach jest prawie natychmiastowy, podczas gdy dostęp do komórek w pamięci RAM trwa stosunkowo długo.
Dlaczego napisałem, że dodając specyfikator register jedynie prosimy o to aby kompilator umieścił dany obiekt w rejestrze?
Ponieważ nie ma gwarancji, że kompilator umieści tam nasz obiekt lecz tylko spore prawdopodobieństwo.
Kiedy stosować?
Wtedy kiedy wiemy, że będziemy korzystać z danego obiektu bardzo wiele razy. Dzięki temu nasz program będzie się wykonywać trochę, a czasami dużo szybciej.
Kiedy nie stosować?
Gdy będziemy chcieli znać adres danego obiektu. Rejestr adresuje się inaczej niż komórki pamięci RAM. Gdy o tym zapomnimy kompilator zignoruje naszą prośbę o umieszczenie obiektu w rejestrze.
Pamiętaj także, żeby używać tego specyfikatora dosyć rozważnie. Pamięć procesora nie jest duża więc nie przesadzaj z umieszczaniem tam wszystkich obiektów.
Na zachętę zrobiłem mały test aby pokazać Wam, że czasami bardzo opłaca się pamiętać o rejestrze.
Program standardowy.
#include <iostream>
using namespace std;
int main()
{
int a = 1;
unsigned int b = 4294967295;
while (b)
{
a = 100 * a * a * b * b / b / a * 2 - 20 + b * b * a;
--b; }
return 0; }
Ten sam program ale wykorzystujący rejestr to przechowywania 2 obiektów.
#include <iostream>
using namespace std;
int main()
{
register int a = 1;
register unsigned int b = 4294967295;
while (b)
{
a = 100 * a * a * b * b / b / a * 2 - 20 + b * b * a;
-–b; } return 0;
}
W tym przypadku wzrost wydajności jest bardzo duży. Program pierwszy wykonuje się u mnie przez 229 sekund podczas gdy drugi program wykonuje się zaledwie 13 sekund!
Screen:
Zobacz także: http://pl.wikipedia.org/wiki/Rejestr_procesora

Mała uwaga co do “unsigned int b = 4294967295;” . Rozumiem, że liczba ta to zasięg unsigned int.
Zależy on jednak od procesora na którym kompiluje się program. W większości wypadków będzie to właśnie taka liczba, ale nie zawsze. W C (w C++ pewnie jakoś podobnie) dołącza się a liczbę zastępuje się makrem ULONG_MAX . Warto o tym pamiętać
Przez: Jacek Bajor w Marzec 22, 2007
o 6:50 pm
WordPress wywali część mojego komentarza (wziął go za taga html). Powinno być: [...] jakoś podobnie) dołącza się < limits.h >
Przez: Jacek Bajor w Marzec 22, 2007
o 6:54 pm
Tak, ale w tym przypadku to nie jest ważne. To tylko liczba powtórzeń pętli, którą lepiej mieć zawsze taką samą a nie domyślać się ile razy wykonała się pętla na podstawie procesora
Przez: changs w Marzec 23, 2007
o 1:48 pm