Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky

Domáce Hardware Siete Programovanie Softvér Otázka Systémy

Aký je rozdiel medzi registrmi ukladania volajúceho a Callee, pokiaľ ide o ich vplyv na efektívnosť výkonnosti programu?

Rozdiel medzi registrmi uloženými volajúcim a Callee sa výrazne ovplyvňuje výkon a efektívnosť programu, predovšetkým prostredníctvom režijných nákladov na ukladanie a obnovenie hodnôt registrov počas funkčných hovorov.

Registre uložené volajúce (známe tiež ako volatilné registre):

* Definícia: Tieto registre sú zodpovednosťou volajúceho (funkcia uskutočňovaná hovor), aby sa zachovala, ak sú potrebné ich hodnoty po návrate Callee (volá sa funkcia).

* Mechanizmus: Pred zavolaním funkcie, ak má volajúci dôležité hodnoty uložené v registroch uložených volajúcim, musí tieto hodnoty tlačiť do zásobníka (alebo ich uložiť inde v pamäti). Po návrate Callee môže volajúci vložiť uložené hodnoty späť do týchto registrov.

* Vplyv na výkon:

* režijné náklady na mieste hovoru: Registre uložené volajúcim vedú k režijnej funkcii pri volacej funkcii. Každý hovor môže vyžadovať tlačenie a praskanie registrov, aj keď Callee tieto registre v skutočnosti nepoužíva.

* potenciálne menej režijné náklady, ak je Callee jednoduchý: Ak je Callee malý a nemusí používať veľa registrov, volajúci nemusí nič ukladať, takže hovor je relatívne efektívny. Volajúci ukladá iba registre, že vie, že potrebuje * a * Callee by mohol potenciálne clobber.

* Vhodný pre krátkodobé hodnoty: Dobré pre premenné, ktoré musia žiť iba v malom rozsahu, pretože úspor/obnovenie sa stáva menším obavám.

* Príklad: V mnohých konvenciách volania X86-64 (napríklad Systém V AMD64 ABI) sa registruje ako `rax`,` rcx`, `rdi`,` rsi`, `r8`,` r9`, `r10`,` r11` (a registre s pohyblivou bodkou, ako je `xmm0-xmm15` na niektorých systémoch).

registre uložené Callee (známe tiež ako nezávislé registre):

* Definícia: Tieto registre sú zodpovednosťou callee (Volá sa funkcia) na zachovanie. Ak ich chce Callee použiť, musí uložiť svoje pôvodné hodnoty na začiatku funkcie a pred návratom ich obnoviť.

* Mechanizmus: Callee tlačí pôvodné hodnoty týchto registrov na zásobník na začiatku jeho vykonania. Pred návratom sa Callee objaví tieto hodnoty späť do registrov a efektívne ich obnovuje do pôvodného stavu.

* Vplyv na výkon:

* v rámci Callee: Registre uložené Callee zavádzajú režijné náklady v rámci funkcie Callee. Každý Callee používajúci tieto registre musí vykonávať úspory a obnovenie bez ohľadu na to, čo volajúci robí.

* pre Callee pomocou mnohých registrov: Ak Callee potrebuje veľa registrov, používanie registrov uložených Callee môže byť efektívnejšie ako registre uložené volajúcim. Volajúci je zaručený, že tieto registre sa budú zachovať bez toho, aby museli robiť čokoľvek.

* Vhodný pre hodnoty s dlhou životnosťou: Dobré pre premenné, ktoré musia žiť vo veľkom funkčnom rozsahu, pretože režijná náklady na úsporu/obnovenie sa amortizuje po dlhšiu dobu ich používania.

* Príklad: V systéme X86-64 v AMD64 ABI sa registruje ako `rbx`,` rsp`, `rbp`,` r12`, `r13`,` r14`, `r15` sú uložené Callee. `RSP` je špeciálny (ukazovateľ zásobníka) a` RBP` (základný ukazovateľ) sa často používa na správu a ladenie rámcov rámu zásobníka.

Kľúčové rozdiely a dôsledky výkonu:

| Funkcia | Registre uložené volajúcim | Registre uložené Callee

| ---------------- | -------------------------------------------------------------------------------------------------------------

| Zodpovednosť | Volajúci na uloženie a obnovenie v prípade potreby pred zavolaním funkcie. | Callee na uloženie a obnovenie, ak ich používa Callee. |

| Režijné náklady Primárne pri volacej funkcii (potenciálne nie je režijné náklady, ak volajúci tieto registre nepotrebuje). | Predovšetkým v rámci nazývanej funkcie (režijné náklady, či volajúci potrebuje zachované registre). |

| Najlepšie použitie Keď volajúci potrebuje zachovať hodnoty iba v malej podskupine hovorov. | Ak je Callee veľký a pravdepodobne použije mnoho registrov, vyhnete sa volajúcemu, ktorý musí uložiť veľa možných registrov. |

| Príklad (x86-64) `rax`,` rcx`, `rdi`,` rsi`, `r8`,` r9`, `r10`,` r11` | `rbx`,` rsp`, `rbp`,` r12`, `r13`,` r14`, `r15` |

Čo je lepšie?

Neexistuje všeobecný „lepší“ prístup. Optimálna voľba závisí od špecifík volacích konvencií, štruktúry programu, frekvencie funkčných hovorov a veľkosti a zložitosti funkcií. Cieľom stratégií prideľovania registrov, ktoré používajú kompilátory a programátori, sa zameriavajú na minimalizáciu režijných nákladov ukladania a obnovovania registrov inteligentným výberom, ktoré sa registrujú na rôzne účely.

* Časté malé hovory: Výhodne by sa mohlo uplatniť volajúci, pretože volajúci šetrí iba to, čo potrebuje. Callee používa registre bez akýchkoľvek nákladov na úsporu/obnovenie.

* zriedkavé veľké hovory: Ak Callee používa mnoho registrov, môže byť vhodné, aby sa uložená Callee. Callee prevezme náklady na úsporu/obnovenie týchto registrov, ale volajúci je oslobodený od toho, aby predvídal, ktoré registre je potrebné uložiť.

v súhrne:

Výber medzi registrmi uloženými volajúcim a Callee sa vyžaduje kompromis medzi režijnými nákladmi na mieste hovoru a režijnými nákladmi v rámci volanej funkcie. Účinné prideľovanie registrov a konvencie volania sa zameriavajú na minimalizáciu tejto režijnej náklady na zlepšenie výkonu programu. Kompilátory a programátori montáž musia porozumieť týmto konceptom, aby optimalizovali kód pre efektívnosť. ABI (binárne rozhranie aplikácie) definuje, ktoré registre sú uložené volajúceho a ktoré sú uložené pre špecifickú architektúru a operačný systém.

Najnovšie články

Copyright © počítačové znalosti Všetky práva vyhradené