En informática , la eliminación de la comprobación de límites es una optimización del compilador útil en lenguajes de programación o sistemas de tiempo de ejecución que imponen la comprobación de límites , la práctica de comprobar cada índice de una matriz para verificar que el índice esté dentro del rango válido definido. [ 1 ] Su objetivo es detectar cuáles de estas operaciones de indexación no necesitan ser validadas en tiempo de ejecución y eliminar esas comprobaciones.
Un ejemplo común es acceder a un elemento de un array, modificarlo y almacenar el valor modificado en la misma posición. Normalmente, este ejemplo implicaría una comprobación de límites al leer el elemento del array y una segunda comprobación al almacenar el elemento modificado en el mismo índice. La eliminación de la comprobación de límites podría evitar la segunda comprobación si el compilador o el entorno de ejecución determinan que ni el tamaño del array ni el índice pueden cambiar entre las dos operaciones. Otro ejemplo se da cuando un programador itera sobre los elementos del array y la condición del bucle garantiza que el índice se encuentra dentro de los límites del array. Puede resultar difícil detectar que la comprobación manual del programador hace redundante la comprobación automática. Sin embargo, en este caso, el compilador o el entorno de ejecución aún podrían realizar una eliminación adecuada de la comprobación de límites.
Implementaciones
En lenguajes compilados de forma nativa
Una técnica para eliminar la comprobación de límites consiste en utilizar una representación de asignación única estática tipada y, para cada matriz, crear un nuevo tipo que represente un índice seguro para esa matriz en particular. El primer uso de un valor como índice de matriz da como resultado una conversión de tipo en tiempo de ejecución (y la comprobación correspondiente), pero posteriormente el valor del índice seguro se puede utilizar sin conversión de tipo, sin sacrificar la corrección ni la seguridad.
En lenguajes compilados JIT
Los lenguajes compilados justo a tiempo, como Java y C#, suelen comprobar los índices en tiempo de ejecución antes de acceder a los arrays . Algunos compiladores justo a tiempo, como HotSpot, pueden eliminar algunas de estas comprobaciones si detectan que el índice siempre está dentro del rango correcto o si una comprobación anterior ya habría generado una excepción. [ 2 ] [ 3 ]
Referencias
- ↑ Steven Muchnick; Muchnick and Associates (15 de agosto de 1997). Diseño e implementación avanzados de compiladores . Morgan Kaufmann. ISBN 978-1-55860-320-2.
eliminación de comprobación de límites.
- ↑ Kawaguchi, Kohsuke (30 de marzo de 2008). "Análisis profundo del código ensamblador desde Java" . Archivado del original el 2 de abril de 2008. Consultado el 2 de abril de 2008 .
- ↑ "Generación de código rápida y eficaz en un compilador Java Just-In-Time" (PDF) . Intel Corporation . Consultado el 22 de junio de 2007 .
Enlaces externos
- W. Amme, J. von Ronne, M. Franz. Uso de la representación SafeTSA para mejorar el rendimiento de una máquina virtual Java existente (2002).
- Errores informáticos
- Optimizaciones del compilador