Wyciek rejestrów
Z Wikipedii
Wyciek rejestrów jest to przerzucanie zmiennych do stosu z powodu przewagi ilości zmiennych do ilości rejestrów. Pojawia się on w programach napisanych w języku wysokiego poziomu.
Kompilatory przetwarzają kod źródłowy na kod maszynowy zrozumiały dla procesora. Współczesne kompilatory wykonują optymalizację kodu wynikowego, a głównym kryterium optymalizacji jest szybkość działania skompilowanego programu. Procesory szybciej wykonują operacje na wewnętrznych rejestrach procesora niż na zewnętrznej (dla CPU) pamięci. Dlatego istotne jest, aby zmienne używane w programie były przechowywane w rejestrach. Procesory dają do dyspozycji oprogramowania określoną liczbę rejestrów, a w wielu procesorach (w technologii CISC) jest jeden wyróżniony rejestr, w którym umieszcza się wyniki działań; pozostałe mają różne przeznaczenia. W wielu architekturach procesorów liczba rejestrów jest niewielka i mniejsza niż zmiennych lokalnych używanych w typowych programach, dlatego konieczne staje się przerzucanie zmiennych pomiędzy rejestrami a pamięcią na czas, gdy zmienne nie są chwilowo potrzebne.
Obecnie większość oprogramowania pisana jest w językach wysokiego poziomu, z użyciem bardzo dużej ilości danych, programista zazwyczaj nie ma wpływu na optymalizację użycia rejestrów. Zakłada się, że optymalizacja kodu dokonywana przez kompilator jest dobra, szybkość procesora i jego wewnętrzna architektura, szczególnie pamięć podręczna, rekompensują tę niepożądaną sytuację. Jednak zjawisko to jest nadal istotne tam, gdzie wydajność działania aplikacji jest najważniejszym kryterium - w systemach czasu rzeczywistego i wbudowanych, w których montuje się procesory o niewielkiej wydajności. Wówczas oprogramowanie często tworzone jest w asemblerze, a programista, który dobrze zna architekturę i sposób działania procesora, może tworzyć algorytmy tak, by zjawisko wycieku rejestrów minimalizować.
W związku z problemami związanymi z optymalizacją pracy procesorów postanowiono zmienić koncepcję działania mikroprocesora, konstruując je w technologii RISC (np. PowerPC). Procesory te mają dużą liczbę rejestrów, wyniki obliczeń można umieszczać w każdym z rejestrów, uproszczono tryby adresowania pamięci, rozkazy mają określony format (np. wielokrotność 2 lub 4 bajtów). Struktura taka ułatwia optymalizację kodu dokonywaną przez kompilator.