Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

Реализации [ править ]

На языках с исходной компиляцией [ править ]

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

На языках с JIT-компиляцией [ править ]

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

Ссылки [ править ]

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

Внешние ссылки [ править ]