Articulo de referencia

Variable dinámica

En programación informática , una variable dinámica es una variable local que se crea para residir en memoria asignada manualmente y que puede asignarse y liberarse. Se divide e...

En programación informática , una variable dinámica es una variable local que se crea para residir en memoria asignada manualmente y que puede asignarse y liberarse. Se divide en tres tipos: variable dinámica de montón implícita, variable dinámica de montón explícita y variable dinámica de montón perdida ( punteros colgantes ). Tiene un alcance indefinido y una extensión dinámica. Se utiliza principalmente en lenguajes de programación especializados como Lisp , Ruby , APL , PHP , TcL , TEX y PERL . [ 1 ]

Tipos de variables dinámicas

  • Variable dinámica de montón implícita: Variables dinámicas cuyos valores se vinculan al almacenamiento del montón al asignarse, y la asignación con liberación ocurre cuando se asigna un nuevo valor, por ejemplo, todas las variables en JavaScript , PHP y APL . Es más flexible que la variable dinámica de montón explícita, ya que se puede asignar más memoria cuando se desconoce el tamaño de memoria requerido.
let l = 10 ; // valor almacenado implícitamente en la memoria del montón let b = 20 ; área = l * b ;
  • Variable dinámica explícita en el montón: Variables dinámicas que se asignan y liberan mediante instrucciones explícitas en tiempo de ejecución, según lo especificado por el programador. Algunos ejemplos son los objetos dinámicos en C++ y los objetos en Java.
int main () { int * y = new int ( 1 ); // Creando la variable dinámica *y for ( int i = 0 ; i < 5 ; i ++ ) { if ( * y <= 5 ) cout << * y << endl ; ( * y ) ++ ; // Incrementa el valor mediante un puntero } delete y ; // Elimina la variable para evitar fugas de memoria return 0 ; }
  • Variable dinámica de montón perdida: Variables dinámicas a las que ya no hace referencia el puntero. Cuando se pierde una variable dinámica de montón, se produce una fuga de memoria . Esta fuga se origina cuando un puntero apunta a una nueva variable dinámica de montón y, posteriormente, el puntero se desplaza a otra variable dinámica de montón. Si la primera variable dinámica de montón no se utiliza, se perderá.
int * a = new int ( 10 ); // asignando a la variable dinámica del montón a = new int ( 20 ); // reasignando a la misma variable sin liberar memoria

Historia

Durante el desarrollo del lenguaje LISP a finales de la década de 1950, la recolección de basura, como forma de gestión dinámica de memoria, se utilizó en la asignación automática y dinámica de LISP. Su objetivo era automatizar la gestión de memoria en lugar de que el programador tuviera que eliminar manualmente el espacio de memoria utilizado. Algoritmos como el de marcado y barrido , el conteo de referencias y el algoritmo de copia fueron fundamentales para el concepto de recolección de basura. Si bien John McCarthy desarrolló estos algoritmos, tanto McCarthy como Marvin Minsky fueron figuras clave en el desarrollo de LISP. [ 2 ]

En ALGOL 68 se utilizaron conceptos previos de variables dinámicas, empleando tanto la asignación de memoria en el montón como en la pila para la asignación de variables. También se utilizaban punteros y recolección de basura limitada para la asignación en el montón. [ 3 ]

Diseñada entre 1968 y 1969, la variable dinámica fue nombrada y definida por primera vez en Pascal , un lenguaje de programación desarrollado por Niklaus Wirth en 1970. En este lenguaje, las variables dinámicas se describían como punteros que almacenaban la memoria de las variables referenciadas. La asignación de memoria a los punteros se realizaba mediante NEWy la liberación mediante DISPOSEel comando. [ 4 ]

Los objetos dinámicos, los punteros y los tipos de variables dinámicas en diferentes lenguajes de programación se describieron por primera vez en profundidad en el libro de Robert Sebesta de 1989, "Conceptos de lenguajes de programación". [ 5 ]

Direccionamiento

En estas variables se utiliza el modo de direccionamiento indirecto, en el que la dirección se determina durante la ejecución en lugar de durante el ensamblaje. Este modo se encuentra en la arquitectura de computadoras x86 .

Alcance y extensión

En términos de alcance (programación informática) y extensión de las variables, las variables dinámicas son locales, a diferencia de las estáticas (globales). Esto significa que solo pueden usarse en la función donde se definen y que reutilizarlas con un valor diferente requiere su liberación y reasignación. El programador controla la vida útil de las variables dinámicas. La memoria asignada a las variables dinámicas se realiza en tiempo de ejecución y, para evitar fugas de memoria, estas deben liberarse antes de su reutilización.

En pocas palabras, las variables dinámicas tienen un alcance indefinido , lo que significa que la vinculación de la variable puede ser vista por cualquier código utilizado en el programa, y ​​un alcance dinámico , lo que significa que la vinculación de la variable solo es visible entre el momento de su creación y el momento en que el control abandona el código que utiliza la variable dinámica durante la ejecución. Por lo tanto, no se puede ver en Python, ya que todas las variables creadas son globales o tienen un alcance léxico .

Los objetos dinámicos se crean en el método principal cuando se desconoce la cantidad de objetos que se utilizarán, lo que los hace más flexibles que los objetos estáticos al permitir la asignación dinámica de memoria . En el siguiente fragmento de código, la clase constructora Counterse invoca automáticamente cuando *cse crea un objeto dinámico y se le asigna el valor 5. Cuando el control elimina deleteel objeto, se llama al destructor~Counter y se imprime la salida.

clase Contador { int valor ; público : Contador ( int inicio ) { // Constructor llamado al inicializar el objeto valor = inicio ; }~ Contador () { // El destructor se llama cuando el objeto es destruido valor -- ; cout << valor ; // imprime 4 } };int main () { Contador * c = nuevo Contador ( 5 ); eliminar c ; retornar 0 ; }

Véase también

Referencias

  1. "Variables dinámicas" . dl.acm.org . doi : 10.1145/378795.378857 . Consultado el 29 de mayo de 2026 .
  2. Nystrom, Robert (27 de julio de 2021). Crafting Interpreters . Genever Benning. ISBN 978-0-9905829-4-6.
  3. Branquart, Paul y Johan Lewi. "Un esquema de asignación de almacenamiento y recolección de basura para Algol 68" . Implementación de Algol 68. 1970.
  4. Price, Ana M. de A. (febrero de 1984). "Definición de variables dinámicas y tipos de datos abstractos en Pascal" . ACM SIGPLAN Notices . 19 (2): 85– 91. doi : 10.1145/948566.948574 . ISSN 0362-1340 . 
  5. Sebesta, RW (2016). Conceptos de lenguajes de programación . Pearson Education India.

Lecturas adicionales

  • Variables dinámicas. David R. Hanson y Todd A. Proebsting. Noviembre de 2000.