Sprawdzanie zakresu

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji, wyszukiwania

Bounds checking (ang. sprawdzanie zakresu) to w programowaniu każda metoda wykrywania czy nowa wartość zmiennej mieści się w zakresie zmiennej przed zapisem do niej, lub czy wartość która zostanie zaraz użyta jako indeks do tablicy jest w granicach tej tablicy. Na przykład wartość 32768 która miałaby być przypisana do 16-bitowej zmiennej ze znakiem (której zakres to -32768 do +32767), lub dostęp do 25 elementu tablicy w której zasięg prawidłowych indeksów to 0 do 9. Pierwszy przypadek to range checking a drugi to index checking.

Negatywne sprawdzenie zakresu zwykle powoduje wywołanie różnego rodzaju wyjątku.

Ponieważ sprawdzanie zakresu przy każdym odwołaniu się do zmiennej lub tablicy jest czasochłonne, w niektórych aplikacjach nie przeprowadza się tego sprawdzenia. Istnieją też specjalne techniki kompilacji umożliwiające eliminację sprawdzeń zakresu w wielu częstych przypadkach; zobacz eliminacja sprawdzania zakresu.

Wiele języków programowania, takich jak C/C++, nigdy nie przeprowadza automatycznego sprawdzania zakresu, co jest umotywowane kwestią szybkości działania programu. Jest to przyczyną bardzo wielu błędów off by one i przepełnienia bufora.

Popularne języki wymagające sprawdzania zakresu podczas działania programu to Ada, Visual Basic, Java i C#. W języku D i wielu innych sprawdzanie zależy od przełącznika kompilatora. C# pozwala na fragmenty kodu oznaczone unsafe, w których można między innymi pominąć sprawdzanie zakresu i umożliwić używanie surowych wskaźników do pamięci dla szybszego wykonania kodu. Jest to przydatne do optymalizacji niewielkich, a często wywoływanych fragmentów, bez obniżania bezpieczeństwa wykonania całego programu.