Las marcas de lápida son un mecanismo para detectar punteros colgantes y mitigar los problemas que pueden causar en los programas informáticos. Los punteros colgantes pueden aparecer en ciertos lenguajes de programación , como C , C++ y lenguajes ensamblador .
Una lápida es una estructura que actúa como intermediaria entre un puntero y su destino, a menudo datos dinámicos en memoria . El puntero, a veces llamado manejador , apunta solo a las lápidas y nunca a su destino real. Cuando se desasignan los datos, la lápida se establece en nulo (o, más generalmente, en un valor no válido para un puntero en el entorno de ejecución dado), lo que indica que la variable ya no existe. [ 1 ] Este mecanismo evita el uso de punteros no válidos, que de otro modo accederían al área de memoria que una vez perteneció a la variable ahora desasignada, aunque ya pueda contener 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 desreferenciación de puntero nulo ). Esto ayuda a analizar la causa real, un error de programación, en la depuración , y también se puede usar para abortar el programa en producción, para evitar que continúe con estructuras de datos no válidas.
En términos más generales, una lápida puede entenderse como un marcador de que "estos datos ya no están aquí". Por ejemplo, en los sistemas de archivos , al eliminar archivos, puede ser eficiente marcarlos como "muertos" en lugar de recuperar inmediatamente todos sus bloques de datos. [ 2 ]
Las desventajas de usar marcadores de eliminación incluyen una sobrecarga computacional y un mayor consumo de memoria: se requiere procesamiento adicional para seguir la ruta desde el puntero hasta los datos a través del marcador de eliminación, y se necesita memoria adicional para conservar los marcadores de eliminación para cada puntero a lo largo del programa. Otro problema es que todo el código que necesita trabajar con los punteros en cuestión debe implementarse para usar el mecanismo de marcadores de eliminación. [ 3 ]
Entre los lenguajes de programación más populares, C++ implementa el patrón de lápida en su biblioteca estándar como un puntero débil mediante std::weak_ptr. No es necesario que los lenguajes de programación o el compilador ofrezcan soporte integrado para utilizar este mecanismo.
Véase también
Referencias
- ↑ Michael Lee Scott (2000). Pragmática del lenguaje de programación . Morgan Kaufmann . pág. 392. ISBN 9781558604421.
- ↑ Clifford A. Shaffer (2012). Estructuras de datos y análisis de algoritmos en C++, tercera edición . Dover Publications . pág. 344. ISBN 9780486172620.
- ↑ Maurizio Gabbrielli; Simone Martini (2010). Lenguajes de programación: principios y paradigmas . Springer London . pág. 248. ISBN 9781848829145.
- Estructuras de programación
- Temas básicos de lenguajes de programación