stringtranslate.com

variable estática

En programación de computadoras , una variable estática es una variable que se ha asignado "estáticamente", lo que significa que su vida útil (o "extensión") es toda la ejecución del programa. Esto contrasta con las variables automáticas de vida más corta , cuyo almacenamiento se asigna y desasigna en la pila de llamadas ; ya diferencia de los objetos , cuyo almacenamiento se asigna y desasigna dinámicamente en la memoria del montón .

La vida útil de la variable se contrasta con el alcance (donde se puede usar una variable): "global" y "local" se refieren al alcance, no a la vida útil, pero el alcance a menudo implica vida útil. En muchos idiomas, las variables globales son siempre estáticas, pero en algunos idiomas son dinámicas, mientras que las variables locales son generalmente automáticas, pero pueden ser estáticas.

En general,La asignación de memoria estática es la asignación de memoria entiempo de compilación, antes de que se ejecute el programa asociado, a diferencia dela asignación de memoria dinámicaola asignación de memoria automáticadonde la memoria se asigna según sea necesario entiempo de ejecución. [1]

Historia

Las variables estáticas datan al menos de ALGOL 60 (1960), donde se las conoce como variables propias :

Una declaración podrá marcarse con el declarante adicional propio. Esto tiene el siguiente efecto: al volver a ingresar al bloque, los valores de las cantidades propias no cambiarán con respecto a sus valores en la última salida, mientras que los valores de las variables declaradas que no están marcadas con propia quedarán indefinidos.

—  Informe revisado sobre ALGOL 60, apartado "5. Declaraciones", p. 14

Esta definición es sutilmente diferente de una variable estática: solo especifica el comportamiento y, por lo tanto, la vida útil, no el almacenamiento: se puede asignar una variable propia cuando se llama a una función por primera vez, por ejemplo, en lugar de en el momento de carga del programa.

El uso de la palabra estática para referirse a estas variables data al menos de BCPL (1966), y ha sido popularizado por el lenguaje de programación C , que estuvo fuertemente influenciado por BCPL. La definición de BCPL dice:

(1) Elementos de datos estáticos:
aquellos elementos de datos cuya extensión dura tanto como el tiempo de ejecución del programa; dichos elementos de datos tienen valores L constantes manifiestos. Cada elemento de datos estáticos debe haber sido declarado en una función o definición de rutina, en una declaración global o como una etiqueta establecida por dos puntos.

—  Manual de referencia de BCPL, 7.2 Asignación de espacio y extensión de los elementos de datos

Tenga en cuenta que BCPL definió un "elemento de datos dinámicos" para lo que ahora se llama una variable automática (local, asignada por pila), no para objetos asignados por montón, que es el uso actual del término asignación dinámica .

La staticpalabra clave se utiliza en C y lenguajes relacionados tanto para variables estáticas como para otros conceptos.

Direccionamiento

El modo de direccionamiento de dirección absoluta solo se puede usar con variables estáticas, porque esos son los únicos tipos de variables cuya ubicación es conocida por el compilador en el momento de la compilación. Cuando el programa ( ejecutable o biblioteca ) se carga en la memoria, las variables estáticas se almacenan en el segmento de datos del espacio de direcciones del programa (si está inicializado), o en el segmento BSS (si no está inicializado), y se almacenan en las secciones correspondientes de los archivos objeto antes . a la carga.

Alcance

En términos de alcance y extensión , las variables estáticas tienen extensión durante toda la ejecución del programa, pero pueden tener un alcance más limitado . Una distinción básica es entre una variable global estática , que tiene alcance global y, por lo tanto, está en contexto en todo el programa, y ​​una variable local estática , que tiene alcance local. Una variable local estática es diferente de una variable local ya que una variable local estática se inicializa solo una vez sin importar cuántas veces se llame a la función en la que reside y su valor se conserva y es accesible a través de muchas llamadas a la función en la que se declara. , por ejemplo, para usarse como variable de recuento. Una variable estática también puede tener alcance de módulo o alguna variante, como un enlace interno en C , que es una forma de alcance de archivo o alcance de módulo.

Ejemplo

Un ejemplo de una variable local estática en C:

#incluir <stdio.h> función vacía () { estático int x = 0 ; // |x| se inicializa solo una vez entre cinco llamadas de |Func| y la variable // se incrementará cinco veces después de estas llamadas. El valor final de |x| // será 5. x ++ ; printf ( "%d \n " , x ); // genera el valor de |x| }              int principal () { Func (); // imprime 1 Func (); // imprime 2 Func (); // imprime 3 Func (); // imprime 4 Func (); // imprime 5             devolver 0 ; } 

Programación orientada a objetos

En la programación orientada a objetos , también existe el concepto de variable miembro estática , que es una " variable de clase " de una clase definida estáticamente, es decir, una variable miembro de una clase determinada que se comparte entre todas las instancias (objetos), y es accesible como una variable miembro de estos objetos. Una variable de clase de una clase definida dinámicamente, en lenguajes donde las clases se pueden definir en tiempo de ejecución, se asigna cuando se define la clase y no es estática.

Las constantes de objetos conocidas en tiempo de compilación, como los literales de cadena , generalmente se asignan estáticamente. En la programación orientada a objetos, las tablas de métodos virtuales de las clases normalmente se asignan de forma estática. Un valor definido estáticamente también puede tener un alcance global , lo que garantiza que se utilice el mismo valor inmutable durante toda una ejecución para mantener la coherencia.

Ver también

Notas

  1. ^ Jack Rons. "¿Qué es la asignación de memoria estática y la asignación de memoria dinámica?". MeritHub [Un instituto de desarrollo profesional] . Consultado el 16 de junio de 2011 . El compilador asigna el espacio de memoria necesario para una variable declarada. Al utilizar el operador dirección de, se obtiene la dirección reservada y esta dirección se puede asignar a una variable de puntero. Dado que la mayoría de las variables declaradas tienen memoria estática, esta forma de asignar un valor de puntero a una variable de puntero se conoce como asignación de memoria estática. La memoria se asigna durante el tiempo de compilación.[ enlace muerto ]

Referencias