ARM assembler met en zonder optimalisatie

M

Mahenrev

Guest
Ik wil graag met enkele vragen.

1] Indien een vergadering uitgang is geoptimaliseerd met-O3 [zware optimalisatie], waarom is alle variabelen bijgehouden in het register?

2] Laten we zeggen dat we geprogrammeerd met een grotere hoeveelheid variabelen, zegt 30 variabelen,
- Wanneer niet geoptimaliseerd, zijn opgeslagen in het geheugen
- Wanneer geoptimaliseerd, zijn opgeslagen in het register

wanneer weet u het register is vol?Waarom is zelfs 1 variabele opgeslagen in het geheugen?

Dankzij wordt vooraf

 
Keeping variabelen in de registers zorgt ervoor dat de uitvoering van het programma wordt zo snel mogelijk, omdat er geen extra leest uit (langzamer) cache / geheugen moeten worden gemaakt.

Maar ik niet echt zien hoe je 30 variabelen in de registers alle tijd kan hebben?
Voor zover ik weet standaard ARM9 ontwerp heeft 16 registers gekregen, en enkele van die worden meestal gebruikt en niet echt beschikbaar.

als u meer variabelen dan vrij registers, zal je eindigen met cache leest / schrijft (of in het ergste geval, het geheugen leest / schrijft), die zal aanzienlijk vertragen uitvoering van het programma.Dat is waarom iedereen probeert te gebruiken zo weinig mogelijk variabelen in de binnenstad van lussen die krijgt vele malen per seconde uitgevoerd.

Een andere benadering is om 2/more variabelen verpakken in een register.
Net als je 2 16bit variabelen hebt, kun je ze in een 32 bits register (lager 16bits = eerste variabele, hogere 16bits = tweede variabele) - nu u een van deze variabelen kunnen krijgen met slechts 1 of 2 shift operaties.Met ARM core verschuiving activiteiten zijn gratis ...

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Lachten" border="0" />
 
Zal de assembler proberen om de code te optimaliseren door "verpakking" variabelen in de registers?

 

Welcome to EDABoard.com

Sponsor

Back
Top