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




