Las lápidas son un mecanismo para detectar punteros colgantes que pueden aparecer en ciertos lenguajes de programación de computadoras , p. Ej. gramo. C , C ++ y lenguajes ensambladores , y para actuar como contención de sus peligrosos efectos.
Una lápida es una estructura que actúa como intermediario entre un puntero y los datos dinámicos del montón en la memoria . El puntero, a veces llamado asa , apunta solo a lápidas y nunca a la memoria que contiene el valor real. Cuando se desasignan los datos, la lápida se establece en un valor nulo (o, más generalmente, en un valor que es ilegal para un puntero en el entorno de ejecución dado), lo que indica que la variable ya no existe. [1]Esto evita el uso de punteros no válidos, que de otro modo accederían al área de memoria que alguna vez perteneció a la variable ahora desasignada, aunque puede que ya contenga otros datos, lo que a su vez provocaría la corrupción de los datos en memoria. Dependiendo del sistema operativo , la CPU puede detectar automáticamente dicho acceso no válido (por ejemplo, para el valor nulo: un error de desreferencia del puntero nulo ). Esto ayuda a analizar la razón real, un error de programación, en la depuración , y también se puede usar para abortar el programa en uso de producción, para evitar que continúe con estructuras de datos no válidas.
En términos más generalizados, una lápida se puede entender como un marcador de "estos datos ya no están aquí". Por ejemplo, en los sistemas de archivos puede ser eficaz al eliminar archivos marcarlos como "muertos" en lugar de recuperar inmediatamente todos sus bloques de datos. [2]
Las desventajas de usar lápidas incluyen una sobrecarga computacional y un consumo de memoria adicional: es necesario un procesamiento adicional para seguir la ruta desde el puntero a los datos a través de la lápida, y se necesita memoria adicional para retener lápidas para cada puntero en todo el programa. Otro problema es que todo el código que debe funcionar con los punteros en cuestión debe implementarse para usar el mecanismo de desecho. [3]
Actualmente, ningún lenguaje de programación popular utiliza lápidas. Sin embargo, el soporte integrado por el lenguaje de programación o el compilador no es necesario para usarlos.
Ver también
Referencias
- ^ Michael Lee Scott (2000). Pragmática del lenguaje de programación . Morgan Kaufmann . pag. 392. ISBN 9781558604421.
- ^ Clifford A. Shaffer (2012). Estructuras de datos y análisis de algoritmos en C ++, tercera edición . Publicaciones de Dover . pag. 344. ISBN 9780486172620.
- ^ Maurizio Gabbrielli; Simone Martini (2010). Lenguajes de programación: principios y paradigmas . Springer London . pag. 248. ISBN 9781848829145.