Udostępnij za pośrednictwem


Okres istnienia

"Okres istnienia" jest okresem, podczas wykonywania programu, w którym istnieje zmienna lub funkcja.Czas trwania magazynowania identyfikatora, określa jego okres istnienia.

Identyfikator zadeklarowany za pomocą storage-class-specifier static ma statyczny czas trwania magazynowania.Identyfikatory z statycznym czasem trwania magazynowania (zwane również "global") mają przechowywane i zdefiniowane wartości na czas trwania programu.Magazyn jest zarezerwowany i wartość przechowywana identyfikatora jest zainicjowana tylko raz, przed uruchomieniem programu.Identyfikator zadeklarowany za pomocą zewnętrznego lub wewnętrznego powiązania ma także statyczny czas trwania magazynowania (zobacz Powiązania).

Identyfikator zadeklarowany bez specyfikatora magazynu klasy static ma automatycznie przechowywany czas trwania, zadeklarowany wewnątrz funkcji.Identyfikator z automatycznym przechowywaniem czasu trwania ("lokalny identyfikator") posiada magazyn i zdefiniowaną wartością tylko w bloku, gdzie został zdefiniowany lub zadeklarowany identyfikator.Automatycznemu identyfikatorowi jest każdorazowo przydzielany nowy magazyn, kiedy program wchodzi do tego bloku, a następnie traci swój magazyn (i jego wartości) kiedy program zamyka blok.Identyfikatory zadeklarowane w funkcji bez powiązania mają również automatyczny czas trwania magazynowania.

Następujące reguły określają, czy identyfikator ma globalny (statyczny) lub lokalny (automatyczny) okres istnienia:

  • Wszystkie funkcje mają statyczny okres istnienia.Dlatego istnieją cały czas podczas wykonywania programu.Identyfikatory zadeklarowane na poziomie zewnętrznym (czyli na zewnątrz wszystkich bloków w programie, na tym samym poziomie co definicje funkcji) zawsze mają globalne (statyczne) okresy istnienia.

  • Jeśli zmienna lokalna ma inicjator, to jest zawsze zainicjowana podczas tworzenia (o ile nie jest zadeklarowana jako static).Parametry funkcji mają również lokalne okresy istnienia.Można określić globalny okres istnienia dla identyfikatora w bloku, przez wprowadzenie specyfikatora klasy magazynowania static, w jego deklaracji.Podczas deklaracji static, zmienna zachowuje swoją wartość od jednego wpisu bloku do następnego.

Mimo, że istnieje identyfikator globalny, okres istnienia podczas wykonywania programu źródłowego (na przykład zewnętrznie zadeklarowana zmienna lub zmienna lokalna zadeklarowana słowem kluczowym static ), może nie być widoczna we wszystkich częściach programu.Zobacz Zakres i widoczność, aby uzyskać informacje o widoczności i Klasy magazynowania, aby uzyskać informacje o symbolach nieterminalnych storage-class-specifier.

Pamięć może być przydzielenia w razie potrzeby (dynamicznie), jeżeli użytkownik użyje specjalnie utworzonej biblioteki procedur, takiej jak malloc.Ponieważ dynamiczna alokacja pamięci używa biblioteki procedur, nie uważa się tego za część języka.Zobacz funkcje malloc w Odwołanie do biblioteki Run-Time.

Zobacz też

Koncepcje

Okres istnienia, zakres, widoczność i połączenie