stringtranslate.com

Eliminación de comprobación de límites

En informática , la eliminación de 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 aplican la comprobación de límites , la práctica de comprobar 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 ser validadas en tiempo de ejecución y eliminar esas comprobaciones.

Un ejemplo común es acceder a un elemento de una matriz, modificarlo y almacenar el valor modificado en la misma matriz en la misma ubicación. Normalmente, este ejemplo daría como resultado una comprobación de límites cuando el elemento se lee de la matriz y una segunda comprobación de límites cuando el elemento modificado se almacena utilizando el mismo índice de la matriz. La eliminación de la comprobación de límites podría eliminar la segunda comprobación si el compilador o el entorno 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 recorre en bucle los elementos de la matriz y la condición del bucle garantiza que el índice está dentro de los límites de la matriz. Puede ser difícil detectar que la comprobación manual del programador hace que la comprobación automática sea redundante. Sin embargo, aún puede ser posible que el compilador o el entorno de ejecución realicen una eliminación de comprobación de límites adecuada en este caso.

Implementaciones

En lenguajes compilados de forma nativa

Una técnica para eliminar la comprobación de límites es utilizar una representación estática tipada en forma de asignación única y crear para cada matriz 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 una conversión de tipo, sin sacrificar la corrección ni la seguridad.

En lenguajes compilados JIT

Los lenguajes compilados en tiempo real, como Java y C#, suelen comprobar los índices en tiempo de ejecución antes de acceder a las matrices . Algunos compiladores en tiempo real, como HotSpot, pueden eliminar algunas de estas comprobaciones si descubren que el índice siempre está dentro del rango correcto o si una comprobación anterior ya hubiera generado una excepción. [2] [3]

Referencias

  1. ^ Steven Muchnick; Muchnick and Associates (15 de agosto de 1997). Implementación del diseño avanzado de compiladores . Morgan Kaufmann. ISBN 978-1-55860-320-2.eliminación de comprobación de límites.
  2. ^ Kawaguchi, Kohsuke (30 de marzo de 2008). "Inmersión profunda en el código ensamblador de Java". Archivado desde el original el 2 de abril de 2008. Consultado el 2 de abril de 2008 .
  3. ^ "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