Explicitní určování registrů pro proměné
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Every program in development at MIT expands until it can read mail.
Některé překladače umožňují určit registr pro proměnou tak, že
ji pojmenujete například __ax. To ale přináší problémy z
portabilitou. Pokud chcete, aby na jedné architektuře byla proměna v
registru ax a na jiné v r1, musíte ji pokaždé pojmenovat jinak. Také
hrozí možnost náhodné kolize.
GCC má opět jiný přístup k věci. Pokud chcete uložit proměnou do
registru napíšete například:
register int ahoj asm("ax");
Gcc umí i velice zajímavou věc - dělat takové proměné globálně.
To funguje docela dobře, protože běžně funkce potom co taková
proměná byla deklarována registr nepoužívají a mohou tedy velmi
rychle pracovat z danou proměnou. Knihovní funkce, které ale nic o
této proměné neví, registr normálně uloží na zásobník a potom zase
restornou, takže se jeho hodnota neztratí. Není přístupná pouze v
případě, že vaše funkce je volána z knihovni (qsort).
výheň