Duración

La “duración” es el período durante la ejecución de un programa en el que una variable o una función existe.La duración del almacenamiento del identificador determina su duración.

Un identificador declarado con *el almacenamiento-clase-especificador *Estática tiene duración de almacenamiento estático.Identificadores con la duración del almacenamiento estático (también denominada “global”) tienen almacenamiento y un valor definido para la duración de un programa.Se reserva el almacenamiento y el valor almacenado de identificador inicializa una sola vez, antes de inicio del programa.Un identificador declarado con vinculación externa o interno también tiene duración de almacenamiento estático (vea Vinculación).

Un identificador declarado sin el especificador de clase de almacenamiento de Estática tiene duración automática de almacenamiento si se declara dentro de una función.Un identificador con la duración automática de almacenamiento (un “identificador local”) tiene almacenamiento y un valor definido únicamente en el bloque donde se define o declarado el identificador.Un identificador automático es nuevo almacenamiento asignado cada vez que el programa escribe ese bloque, y pierde su almacenamiento (y el valor) cuando el programa termina el bloque.Los identificadores declarados en una función sin vinculación también tienen duración automática de almacenamiento.

las reglas siguientes especifican si un identificador tiene duración (automática) global (estático) o local:

  • todas las funciones tienen duración estática.Por consiguiente existen siempre durante la ejecución del programa.Los identificadores declarados en el nivel de externo (es decir, fuera de todos los bloques del programa en el mismo nivel de definiciones de función) siempre tienen una duración (estáticas) globales.

  • Si una variable local tiene un inicializador, inicializa la variable cada vez que se crea (a menos que se declara como Estática).los parámetros de la función también tienen duración local.Puede especificar la duración global para un identificador dentro de un bloque como el especificador de clase de almacenamiento de Estática en su declaración.Estáticauna vez declarado, la variable mantiene su valor de una entrada de bloque al siguiente.

Aunque un identificador con una duración global existe en la ejecución del programa de origen (por ejemplo, una variable externamente declarada o una variable local declarada con la palabra clave de Estática ), puede no estar visible en todas las partes del programa.Vea ámbito y Visibility para obtener información sobre la visibilidad, y vea clases de almacenamiento para una descripción del almacenamiento-clase-especificador no terminal.

La memoria se puede asignar según sea necesario (dinámico) si se crea con el uso de las rutinas de biblioteca especial como malloc.Puesto que la asignación de memoria dinámica utiliza las rutinas de biblioteca, no se considera parte del lenguaje.Vea la función de malloc en la referencia de la biblioteca en tiempo de ejecución.

Vea también

Conceptos

Duración, ámbito, Visibility, y Linkage