Sdílet prostřednictvím


Životnost

„Životnost“ je doba provádění při vykonávání programu, ve které existuje proměnná nebo funkce. Doba trvání úložiště identifikátoru určuje jeho životnost.

Identifikátor deklarovaný specifikátorem static třídy úložiště má dobu trvání statického úložiště. Identifikátory se statickou dobou úložiště (nazývané také „globální“) mají úložiště a definovanou hodnotu po dobu vykonávání programu. Úložiště je vyhrazeno a uložená hodnota identifikátoru je inicializována pouze jednou, před spuštěním programu. Identifikátor deklarovaný externím nebo interním propojením má také dobu trvání statického úložiště (viz Propojení).

Identifikátor deklarovaný bez specifikátoru static třídy úložiště má automatickou dobu trvání úložiště, pokud je deklarována uvnitř funkce. Identifikátor s automatickou dobou trvání úložiště („místní identifikátor“) má úložiště a definovanou hodnotou pouze v rámci bloku, kde je identifikátor definován nebo deklarován. Automatickému identifikátoru je přiděleno nové úložiště pokaždé, když program přejde do tohoto bloku a ztratí své úložiště (a jeho hodnotu) při opuštění bloku programem. Identifikátory, které jsou deklarovány ve funkci bez propojení, mají také automatickou dobu trvání úložiště.

Následující pravidla určují, zda má identifikátor globální (statickou) nebo místní (automatickou) životnost:

  • Všechny funkce mají statickou životnost. A proto existují po celou dobu při provádění programu. Identifikátory deklarované na vnější úrovni (tedy mimo všechny bloky v programu na stejné úrovni definic funkcí) mají vždy globální (statickou) životnost.

  • Pokud má místní proměnná inicializátor, je proměnná inicializována při každém vytvoření (pokud není deklarována jako static). Parametry funkce mají také místní životnost. Globální životnost identifikátoru v rámci bloku můžete zadat zahrnutím specifikátoru static třídy úložiště do deklarace. Jakmile je proměnná deklarována static, zachová si její hodnotu z jedné položky bloku na další.

Přestože identifikátor s globální životností existuje během provádění zdrojového programu (například externě deklarovanou proměnnou nebo místní proměnnou deklarovanou pomocí klíčového static slova), nemusí být viditelné ve všech částech programu. Informace o viditelnosti najdete v tématu Obor a viditelnost a v tématu Třídy úložiště najdete diskuzi o nespecifikátoru specifikátoru třídy úložiště.

Paměť lze rozdělit podle potřeby (dynamicky), pokud je vytvářena pomocí speciálních rutin knihovny, jako je malloc. Jelikož dynamické přidělování paměti používá rutiny knihoven, není považováno za součást jazyka. Podívejte se na funkci malloc v referenčních informacích k knihovně runtime.

Viz také

Doba platnosti, rozsah, viditelnost a propojení