Устранение проверки границ - Bounds-checking elimination

В Информатика, исключение проверки границ это оптимизация компилятора полезно в языки программирования или же системы исполнения это принуждение проверка границ, практика проверки каждого индекса в множество чтобы убедиться, что индекс находится в пределах определенного допустимого диапазона индексов.[1] Его цель - определить, какие из этих операций индексирования не нужно проверять на время выполнения, и устранение этих проверок.

Одним из распространенных примеров является доступ к элементу массива, его изменение и сохранение измененного значения в том же массиве в том же месте. Обычно этот пример приводит к проверке границ, когда элемент считывается из массива, и второй проверке границ, когда измененный элемент сохраняется с использованием того же индекса массива. Устранение проверки границ может исключить вторую проверку, если компилятор или среда выполнения могут определить, что ни размер массива, ни индекс не могут измениться между двумя операциями с массивом. Другой пример возникает, когда программист зацикливается элементы массива, а условие цикла гарантирует, что индекс находится в границах массива. Может быть трудно обнаружить, что ручная проверка программиста делает автоматическую проверку избыточной. Однако в этом случае компилятор или среда выполнения все еще может выполнить надлежащее исключение проверки границ.

Реализации

На языках с исходной компиляцией

Одним из методов исключения проверки границ является использование типизированного статическая форма единого назначения представление и для каждого массива создать новый тип, представляющий безопасный индекс для этого конкретного массива. Первое использование значения в качестве индекса массива приводит к приведению типа во время выполнения (и соответствующей проверке), но впоследствии безопасное значение индекса можно использовать без приведения типа, без ущерба для правильности или безопасности.

На языках с JIT-компиляцией

Скомпилировано точно в срок языки, такие как Ява и C # часто проверяйте индексы во время выполнения перед доступом массивы. Некоторые JIT-компиляторы, такие как HotSpot могут отменить некоторые из этих проверок, если обнаружат, что индекс всегда находится в правильном диапазоне, или если более ранняя проверка уже вызвала бы исключение.[2][3]

Рекомендации

  1. ^ Стивен Мучник; Muchnick and Associates (15 августа 1997 г.). Расширенная реализация проекта компилятора. Морган Кауфманн. ISBN  978-1-55860-320-2. исключение проверки границ.
  2. ^ Кавагути, Косуке (30 марта 2008 г.). «Глубокое погружение в ассемблерный код с Java». Архивировано из оригинал на 2008-04-02. Получено 2008-04-02.
  3. ^ «Быстрая и эффективная генерация кода в своевременном компиляторе Java» (PDF). Корпорация Intel. Получено 2007-06-22.

внешняя ссылка