Устранение проверки границ
В информатике или исключение проверки границ — это оптимизация компилятора, полезная в языках программирования системах времени выполнения , которые обеспечивают проверку границ , практику проверки каждого индекса в массиве для проверки того, что индекс находится в пределах определенного допустимого диапазона индексов. [1] Его цель — определить, какие из этих операций индексирования не нуждаются в проверке во время выполнения , и исключить эти проверки.
Одним из распространенных примеров является доступ к элементу массива, его изменение и сохранение измененного значения в том же массиве и в том же месте. Обычно этот пример приводит к проверке границ, когда элемент считывается из массива, и второй проверке границ, когда измененный элемент сохраняется с использованием того же индекса массива. Исключение проверки границ может исключить вторую проверку, если компилятор или среда выполнения могут определить, что ни размер массива, ни индекс не могут измениться между двумя операциями с массивом. Другой пример возникает, когда программист перебирает элементы массива, и условие цикла гарантирует, что индекс находится в пределах границ массива. Может быть трудно обнаружить, что ручная проверка программиста делает ненужной автоматическую проверку. Однако в этом случае компилятор или среда выполнения все равно могут выполнить правильное исключение проверки границ.
Реализации
[ редактировать ]На родно компилируемых языках
[ редактировать ]Один из методов исключения проверки границ — использовать типизированное статическое представление в форме одного присваивания и создать для каждого массива новый тип, представляющий безопасный индекс для этого конкретного массива. Первое использование значения в качестве индекса массива приводит к приведению типа во время выполнения (и соответствующей проверке), но впоследствии значение безопасного индекса можно использовать без приведения типа, не жертвуя правильностью или безопасностью.
На языках, компилируемых JIT
[ редактировать ]Языки , компилируемые точно в срок, такие как Java и C#, часто проверяют индексы во время выполнения, прежде чем обращаться к массивам . Некоторые JIT-компиляторы, такие как HotSpot, могут исключить некоторые из этих проверок, если они обнаружат, что индекс всегда находится в правильном диапазоне или если более ранняя проверка уже вызвала бы исключение. [2] [3]
Ссылки
[ редактировать ]- ^ Стивен Мучник; Мучник и партнеры (15 августа 1997 г.). Расширенная реализация проекта компилятора . Морган Кауфманн. ISBN 978-1-55860-320-2 .
устранение проверки границ.
- ^ Кавагути, Косуке (30 марта 2008 г.). «Глубокое погружение в ассемблерный код Java» . Архивировано из оригинала 2 апреля 2008 г. Проверено 2 апреля 2008 г.
- ^ «Быстрая и эффективная генерация кода с помощью JIT-компилятора Java» (PDF) . Корпорация Интел . Проверено 22 июня 2007 г.
Внешние ссылки
[ редактировать ]- В. Амме, Ж. фон Ронне, М. Франц. Использование представления SafeTSA для повышения производительности существующей виртуальной машины Java (2002 г.).