DurataLifetime

"Durata" è il periodo di tempo durante l'esecuzione di un programma in cui esiste una variabile o una funzione."Lifetime" is the period during execution of a program in which a variable or function exists. La durata di archiviazione dell'identificatore determina la sua durata.The storage duration of the identifier determines its lifetime.

Un identificatore dichiarato con storage-class-specifier static ha una durata di archiviazione statica.An identifier declared with the storage-class-specifier static has static storage duration. Gli identificatori con durata di archiviazione statica (anche detta "globale") dispongono di archiviazione e di un valore definito per la durata di un programma.Identifiers with static storage duration (also called "global") have storage and a defined value for the duration of a program. L'archiviazione è riservata e il valore archiviato dell'identificatore viene inizializzato solo una volta, prima dell'avvio del programma.Storage is reserved and the identifier's stored value is initialized only once, before program startup. Anche un identificatore dichiarato con collegamento esterno o interno ha una durata di archiviazione statica (vedere Collegamento).An identifier declared with external or internal linkage also has static storage duration (see Linkage).

Un identificatore dichiarato senza l'identificatore classe di archiviazione static ha una durata di archiviazione automatica se è dichiarato all'interno di una funzione.An identifier declared without the static storage-class specifier has automatic storage duration if it is declared inside a function. Un identificatore con durata di archiviazione automatica (un "identificatore locale") dispone di archiviazione e di un valore definito solo all'interno del blocco in cui l'identificatore viene definito o dichiarato.An identifier with automatic storage duration (a "local identifier") has storage and a defined value only within the block where the identifier is defined or declared. Un identificatore automatico è una nuova archiviazione allocata ogni volta che il programma accede a tale blocco e perde la relativa archiviazione (e il relativo valore) quando il programma esce dal blocco.An automatic identifier is allocated new storage each time the program enters that block, and it loses its storage (and its value) when the program exits the block. Anche gli identificatori dichiarati in una funzione senza collegamento hanno una durata di archiviazione automatica.Identifiers declared in a function with no linkage also have automatic storage duration.

Le regole seguenti specificano se un identificatore ha durata globale (statica) o locale (automatica):The following rules specify whether an identifier has global (static) or local (automatic) lifetime:

  • Tutte le funzioni hanno una durata statica.All functions have static lifetime. Pertanto sono sempre presenti durante l'esecuzione del programma.Therefore they exist at all times during program execution. Gli identificatori dichiarati a livello esterno (ovvero all'esterno di tutti i blocchi nel programma allo stesso livello delle definizioni di funzione) hanno sempre durate globali (statiche).Identifiers declared at the external level (that is, outside all blocks in the program at the same level of function definitions) always have global (static) lifetimes.

  • Se una variabile locale dispone di un inizializzatore viene inizializzata ogni volta che viene creata (a meno che non venga dichiarata come static).If a local variable has an initializer, the variable is initialized each time it is created (unless it is declared as static). Anche i parametri di funzione dispongono di durata locale.Function parameters also have local lifetime. È possibile specificare la durata globale per un identificatore all'interno di un blocco includendo l'identificatore classe di archiviazione static nella dichiarazione dell'identificatore.You can specify global lifetime for an identifier within a block by including the static storage-class specifier in its declaration. Dopo che è stata dichiarata come static, la variabile mantiene il valore da una voce del blocco alla seguente.Once declared static, the variable retains its value from one entry of the block to the next.

    Anche se un identificatore con durata globale esiste durante l'intera esecuzione del programma di origine (ad esempio una variabile dichiarata esternamente o una variabile locale dichiarata con la parola chiave static), l'identificatore potrebbe non essere visibile in tutte le parti del programma.Although an identifier with a global lifetime exists throughout the execution of the source program (for example, an externally declared variable or a local variable declared with the static keyword), it may not be visible in all parts of the program. Vedere Ambito e visibilità per informazioni sulla visibilità e Classi di archiviazione per informazioni sull'identificatore storage-class-specifier non terminale.See Scope and Visibility for information about visibility, and see Storage Classes for a discussion of the storage-class-specifier nonterminal.

    La memoria può essere allocata in base alle esigenze (dinamica) se creata tramite l'utilizzo delle routine di libreria speciali come malloc.Memory can be allocated as needed (dynamic) if created through the use of special library routines such as malloc. Poiché l'allocazione di memoria dinamica utilizza routine di libreria, non viene considerata parte del linguaggio.Since dynamic memory allocation uses library routines, it is not considered part of the language. Vedere la funzione malloc in Riferimenti alla libreria di runtime.See the malloc function in the Run-Time Library Reference.

Vedere ancheSee Also

Durata, ambito, visibilità e collegamentoLifetime, Scope, Visibility, and Linkage