www.amapro.cz & David Bazala [Programování]

Otevře webové stránky AmaPro


Otevře hlavní stránku společnosti AmaPro
Internetové stránky určené pro studenty středních a vysokých odborných škol.


amapro.cz/odkazy Projekt eliminuje vyhledávání klíčových slov na komerčních stránkách a v e-schopech.



Nový projekt AmaPro

auto

 

Jedná se o příkaz k určení modifikátoru paměťové třídy. Tento příkaz před proměnnou a jejím typem dává překladači informaci jak s danou proměnnou naložit v době překladu a optimalizace. Auto je odvozeno od slova automatická proměnná, která se používá v době překladu nejčastěji. Jedná se o implicitní paměťovou třídu, takže příkaz auto není nutné ve zdrojovém textu uvádět. Poznámka: ani se neuvádí.

 

Paměťová třída auto je překladačem implementovaná na proměnné, která vznikají uvnitř funkcí (j.ř. ve složených závorkách). Po dobu provádění funkce, či bloku dat je proměnná auto viditelná. Při opuštění funkce proměnná deklaračně zaniká. Po dobu provádění funkce, či bloku dat je proměnná auto uložená v zásobníku. Při opuštění funkce se hodnota Byte v zásobníku  nemění, ale mění se organizační pořádek.

 

Formát  modifikátoru paměťové třídy auto:

 

auto int nazev;             = >   int nazev;             = >    auto nazev;

 

Zde jsou znázorněny různé systaxe deklarací proměnné nazev, které znamenají totéž. Při neuvedení modifikátoru paměťové třídy se snaží překladač použít implicitně auto. Při neuvedení typu proměnné je implicitně překladačem použit int.

 

POZNÁMKA:

 Pokud uvedeme plnou syntaxi s příkazem auto, nutíme překladač k tomu, aby za každou cenu ponechal proměnnou v zásobníku. Jinak by překladač mohl dle okolnosti při optimalizaci naložit s alokací této proměnné jakkoliv. Pokud by se nezadařilo ponechat proměnnou v zásobníku, hlásí překladač varovnou zprávu.

 

 

Programová struktura modifikátoru paměťové třídy auto

 

for(auto int i=0;i<10;i++)

     {

      blok existence i

     }

 

for(auto int i=0;i<-10;i--)

     {

      blok existence i

     }

               

Obě proměnné mají název i, obě jsou int, ale leží v jiných příkazových blocích a překladač ví, že se jedná o rozdílné proměnné. Poznámka: Pokud by byly tyto příkazové bloky takhle po sobě, je dost pravděpodobné, že první proměnná i zaujme v zásobníku pozici 4 Byte, následně zanikne. Druhá alokace i v zásobníku může zaujmout stejné 4 Byte jako první i. Spoléhat nato ale nelze.

 

 

for(auto int i=0;i<10;i++)

     {

      blok existence i

      for(auto int i=0;i<-10;i--)    //další deklarace i již nelze

          {

           blok existence i             //i je z nadřazeného příkazového bloku

          }

     }

 

Tato konstrukce je nepovolená, neboť nemůžeme deklarovat název proměnné v dalších vnořených blocích. Ve všech vnořených blocích je dříve deklarovaná proměnná již viditelná a musí být proto i identická (jedinečná). Poznámka: Dvojitá deklarace proměnné je logická chyba pro překladač Céčka, při běhu programu jsou procesoru zcela jedno názvy proměnných. On pracuje s umístěním Byte v zásobníku.

 

 

Specifika paměťové třídy auto

 

Paměťová třída auto je nejběžněji používána překladačem pro implementaci alokace do paměťového prostoru. Překladač třídu auto implementuje pro lokální proměnné, jejíchž životnost je krátká (po dobu provádění strojové subrutiny). Strojový kód říká procesoru aby hodnotu (resp. 4 Byte) ponechal v zásobníku, neboť v následujících okamžicích budeme s touhle proměnnou (resp. 4 Byte) provádět operace. Přístup do zásobníku je středně rychlý a zásobník umožňuje pojmout větší množství lokálních proměnných. Základem správné funkce zásobníku je správný organizační pořádek Byte v zásobníku. To si řeší procesor sám a to na základě momentálních možností.

 

POZNÁMKA:

Příkaz auto je jen informací pro překladač požadavku programátora. Užitečný přínos modifikátorů paměťových tříd byl u starších procesoru. Překladače pro dnešní procesory mají možnosti využívat větší množství registrů CPU, procesy v CPU i přístupu do konvenční a rozšířené paměti jsou dostatečně rychle. Překladače umožňují velké množství specifických optimalizací takže pojmy auto, static, extern a registr se při psaní zdrojových textů používají ojediněle.

 

PŘÍKLAD: auto_1

int vlastni(void)                                                  //hlavička nové funkce, vrací int, nevstupuje nic

{                                                                            //počátek bloku příkazu pro vlastni

auto int i=random(200);                                     //volá funkci random a výsledek ukladá do zásobníku

return i;                                                                //ze zásobníku bere původní odskokovou adresu a poslední výsledek

}                                                                            //konec bloku příkazu pro vlastni

//------------------------------------------------------

int main(int argc, char* argv[])                         //povinná hlavička konzolové aplikace

{                                                                            //počátek hlavního bloku příkazů

for(auto int i=0;i<10;i++)                                   //alokuje 4 Byte jako int v zásobníku

   {                                                                         //začátek těla příkazu for

   cout<<vlastni()<<endl;                                  //do výstupního proudu vstupuje výsledek volané funkce

   }                                                                         //konec těla příkazu for

getchar();                                                             //čekání na entr

return 0;                                                               //výstup z konzolové aplikace

}                                                                            //konec hlavního bloku příkazů

 

Program demonstruje použití příkazu auto při alokaci paměťového prostoru pro proměnné. První proměnná která zaujme své místo (resp.4 byte) v zásobníku, bude z cyklu for. V těle cyklu for je volání funkce vlastní() (subrutiny), která způsobí další alokaci 4 Byte v zásobníku. Do nich funkce random zapíše náhodné hodnoty a příkaz return ukazuje na místo oněch 4 Byte v zásobníku. Za returnem končí funkce vlastní() a tedy i existence proměnné. Ovšem obsah oněch 4 Byte je stejný. V cyklu for je volání cout, do niž vstupuje výsledek z volané funkce vlastní(). Výsledek je odvozen od ukazatele posledního return. Tedy na 4 Byte v zásobníku. Vše proběhne 10x, tedy 10x dojde k alokaci 4 Byte a 10x k zrušení alokace. Informace o tom kolikrát se již tak stalo bude též uložená v zásobníku. Po ukončení těla příkazu for i tato alokace zanikne.

 

 



Abecední seznam všech článků Vyhledání pojmů ve článcích




Databáze obrázků
Malé a velké obrázky, podlkady, tlačítka, okrasné čáry a pod.
datove_zdroje/obrazky
Popis HTML formátu
Velikost textu, barva textu, rozvržení stránky, obrázky, barva pozadí se zapisuje pomocí HTML příkazů.
stranky/html_tag
Zapojení kabelů
Popis vývodů a křížení různých propojovacích kabelů
konektory.php
Mikropočítače a jejich programování
Nízká forma programování, assembler a struktura procesorů.
knihy/mikropocitace/obsah_mikro1.php
Mikroprocesory IV.
Varianty návrhu číslicových řídících systémů realizovaných jako sekvenční obvody.
programovani/procesory_4
JavaScript - ukázky
Příklady užití některých často používaných efektů na stránky.
katalogy/javascript
Objektové programování c++
Jazyk C, Objektové programování c++
internet/katalog_programovani_c
Weby o programování
Odkazy na velké servery o programování a vývoji SW
odkazy/programovani
Animované obrázky
Animované gify a malé obrázky pro všeobecné využití.
datove_zdroje/animace
Otevře stránky Fulltextové vyhledávání na celém serveru
Digitalizované odborné knihy
Velká encyklopedie pojmů a zkratek
Česko - anglicko - německý technický slovník
Klasický katalog firem, služeb a stránek
OnLine překladač  vět a textů (nepoužívá Google)
Stránky pro chvíle oddechu od studia, relaxace
Katalog českých firem dle technologií
Internetový odkazník
Otevře hlavní stranu pro oddíl programování




 Wikipedie   Seznam stránek   Kapitoly témat   Významné servery   Klíčová slova 








Otevře hlavní stranu společnosti AmaPro

Všechna práva vyhrazena. Určeno jen pro osobní využití. Bez předchozího písemného souhlasu správce www.amapro.cz je zakázána jakákoli další publikace, přetištění nebo distribuce jakéhokoli materiálu nebo části materiálu zveřejněného na www.amapro.cz a to včetně šíření prostřednictvím elektronické pošty. Články, jejichž přímým autorem není amapro.cz lze publikovat pouze se souhlasem jejich majitelů či administrátoru příslušného webu.