Použití VariablesEdit
Viditelnost a Životnost VariablesEdit
Proměnné mohou mít různou viditelnost, nebo rozsah, podle toho, jak jsou deklarovány a použity. Rozsah označuje schopnost přístupu k obsahu konkrétní proměnné v určitém bodě programu.
rozsah proměnné je obvykle určen jejím uzavíracím blokem. Blok může být explicitně uzavřen v některých jazycích (begin / end, { / } páry), zatímco v jiných je blok implicitní.
téměř všechny jazyky mají celkový ohraničující rozsah, a pokud program deklaruje proměnnou v tomto rozsahu, je známá jako globální proměnná.
místní proměnná je naproti tomu proměnná, která je viditelná pouze v rámci svého bloku nebo „v rozsahu“.
Zvážit tento kód:
integer globalVariableglobalVariable = 5begin integer localVariable localVariable = 7 globalVariable = 8endlocalVariable = 3 /* <-- this is a syntax error */
globální proměnná deklarována mimo blok, takže je v (implicitní) globální rozsah, takže je to globální proměnná. místní proměnná je deklarována v bloku začátek/konec, což omezuje její rozsah na tento blok.
proměnná globalVariable začíná jako 5, je přiřazena 8 v bloku a končí jako 8. Proměnná localVariable je přiřazena 7, poté zmizí z působnosti, než bude nelegálně přidělena 3. Na této úrovni neexistuje žádná proměnná localVariable.
životnost proměnné vám řekne, kdy je proměnná aktivní. V předchozím příkladu je globální proměnná vytvořena na začátku programu a má životnost rovnající se délce programu. Pro localVariable je vytvořen až těsně po spuštění bloku. Jeho životnost je u konce, když program projde koncovou směrnicí.
Dynamic memory allocationEdit
mnoho programů má velmi specifické účely a potřebuje pro paměť velmi specifické a malé oblasti. Pokud bychom psali program pro čtení obrazových souborů, nejsme si jisti, jak velké by obrázky mohly být. Některé mohou být stovky megabajtů, zatímco některé mohou být kilobajty nebo méně. Přidělení stovek megabajtů, které nejsou potřeba, by ztěžovalo spuštění programu na některých počítačích, zatímco přidělení příliš malé paměti by znamenalo, že existují některé obrázky, které nemůžeme zvládnout.
dobrým přístupem k tomuto problému je přidělení paměti podle potřeby. Tomu se říká dynamická alokace paměti. Jednoduše žádáme o tolik, kolik potřebujeme, když je program spuštěn (spíše než v době kompilace), nic víc a nic méně. V našem příkladu by nám to umožnilo efektivně a efektivně upravovat obrovské i malé obrazové soubory. Je tu určitá složitost, protože to již není jazyk, který se zabývá detaily alokace, ale přímo nás. V našem příkladu, pokud běžíme na nižším počítači, nemusí být dostatek paměti pro uložení velkých obrazových souborů, takže v takových situacích musíme detekovat (a možná elegantně selhat).
Dynamické přidělování paměti je hlavním zdrojem „úniky paměti“, kde programy přidělit, použít a pak udělal s oblastí paměti, ale nepodaří označit jako jsou k dispozici opět. Tyto problémy může být těžké vystopovat, protože na rozdíl od jiných chyb, úniky nejsou snadno patrné.
některé moderní jazyky mají vestavěné mechanismy, které se snaží zabránit úniku paměti, známé jako sběr odpadu. Tento systém sleduje, jaká alokace se používá, pokud je mimo rozsah. Sběr odpadků má mírný výkonnostní trest, ale nyní se běžně považuje za pokrok. Například Java a Python mají sběrač odpadků.