RSS

Komórka pamięci o adresie zero

Liczba odsłon: 15

Większość języków programowania zakłada, że wskaźnik o wartości zero wskazuje na nieistniejącą komórkę pamięci i może być traktowany jako nieużywany lub niepoprawny. Często też dostępne są symbole o odpowiedniej wartości (nilPascalu, NULL w C, 0 w C++). Czy oznacza to jednak, że komórka o adresie zerowym jest w jakiś sposób nieużyteczna lub niedostępna?

Zdecydowanie nie. Wskaźnik zerowy jest takim samym wskaźnikiem jak każdy inny i jeżeli tylko w pamięci pod adresem 0 jest jakaś użyteczna informacja, możesz ją bez problemu odczytać lub zmienić nawet, jeżeli definicja języka zakłada, że wskaźnik zerowy jest niepoprawny.

Inna sprawa, że rzeczywiście pod adresem zerowym najczęściej... nie ma nic ciekawego! W trybie rzeczywistym procesorów IA-32 w najniższych adresach pamięci znajduje się tablica przerwań, której modyfikowanie powinno odbywać się tylko w wyjątkowych przypadkach. Z kolei w trybie chronionym systemy operacyjne najczęściej podstawiają na początku pamięci obszar nieistniejących stron, by ułatwiać wykrywanie prób korzystania z niezainicjalizowanych wskaźników (które mogą mieć wartość zero).

Zerowy wskaźnik, choć nie wyróżniony wcale w żaden sposób, rzeczywiście nie ma specjalnego sensu i spokojnie może być jak widać traktowany jako niepoprawny.