En informática , la eliminación de verificación de límites es una optimización del compilador útil en lenguajes de programación o sistemas de ejecución que imponen la verificación de límites , la práctica de verificar cada índice en una matriz para verificar que el índice está dentro del rango válido definido de índices. [1] Su objetivo es detectar cuáles de estas operaciones de indexación no necesitan validarse en tiempo de ejecución y eliminar esas comprobaciones.
Un ejemplo común es acceder a un elemento de la matriz, modificarlo y almacenar el valor modificado en la misma matriz en la misma ubicación. Normalmente, este ejemplo daría como resultado una verificación de límites cuando el elemento se lee de la matriz y una segunda verificación de límites cuando el elemento modificado se almacena utilizando el mismo índice de matriz. La eliminación de la comprobación de límites podría eliminar la segunda comprobación si el compilador o el tiempo de ejecución pueden determinar que ni el tamaño de la matriz ni el índice podrían cambiar entre las dos operaciones de la matriz. Otro ejemplo ocurre cuando un programador se repitelos elementos de la matriz, y la condición de bucle garantiza que el índice está dentro de los límites de la matriz. Puede ser difícil detectar que la verificación manual del programador hace que la verificación automática sea redundante. Sin embargo, es posible que el compilador o el tiempo de ejecución realicen una eliminación adecuada de la comprobación de límites en este caso.
Implementaciones
En lenguajes compilados de forma nativa
Una técnica para la eliminación de verificación de límites es utilizar una representación de formulario de asignación única estática con tipo 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 una verificación adecuada), pero posteriormente el valor de índice seguro se puede usar sin una conversión de tipo, sin sacrificar la corrección o la seguridad.
En lenguajes compilados por JIT
Los lenguajes compilados justo a tiempo , como Java y C #, a menudo comprueban los índices en tiempo de ejecución antes de acceder a las matrices . Algunos compiladores just-in-time, como HotSpot , pueden eliminar algunas de estas comprobaciones si descubren que el índice está siempre dentro del rango correcto o si una comprobación anterior ya hubiera arrojado una excepción. [2] [3]
Referencias
- ^ Steven Muchnick; Muchnick y Asociados (15 de agosto de 1997). Implementación avanzada del diseño del compilador . Morgan Kaufmann. ISBN 978-1-55860-320-2.
eliminación de comprobación de límites.
- ^ Kawaguchi, Kohsuke (30 de marzo de 2008). "Profundización en el código ensamblador de Java" . Archivado desde el 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 de Java justo a tiempo" (PDF) . Intel Corporation . Consultado el 22 de junio de 2007 .
enlaces externos
- W. Amme, J. von Ronne, M. Franz. Uso de la representación de SafeTSA para impulsar el rendimiento de una máquina virtual Java existente (2002).