Nagrobek (programowanie)
Nagrobki to mechanizm wykrywania zwisających wskaźników i łagodzenia problemów, jakie mogą powodować w programach komputerowych. Wiszące wskaźniki mogą pojawiać się w niektórych językach programowania , np. C , C++ i językach asemblera .
Tombstone to struktura, która działa jako pośrednik między wskaźnikiem a jego celem, często dynamicznymi danymi sterty w pamięci . Wskaźnik – czasami nazywany uchwytem – wskazuje tylko na nagrobki, a nigdy na właściwy cel. Po cofnięciu alokacji danych relikt jest ustawiany na wartość null (lub bardziej ogólnie do wartości, która jest niedozwolona dla wskaźnika w danym środowisku wykonawczym), wskazując, że zmienna już nie istnieje. Mechanizm ten zapobiega używaniu nieprawidłowych wskaźników, które w przeciwnym razie miałyby dostęp do obszaru pamięci, który kiedyś należał do zwolnionej zmiennej, chociaż może on już zawierać inne dane, co z kolei prowadzi do uszkodzenia danych w pamięci. W zależności od systemu operacyjnego , CPU może automatycznie wykryć taki nieprawidłowy dostęp (np. dla wartości zerowej: błąd wyłuskania wskaźnika zerowego ). Pomaga to w analizie rzeczywistej przyczyny, błędu programowania, w debugging , a także można go użyć do przerwania programu w użyciu produkcyjnym, aby uniemożliwić mu kontynuowanie z nieprawidłowymi strukturami danych.
Mówiąc bardziej ogólnie, nagrobek można rozumieć jako znacznik „tych danych już nie ma”. Na przykład w systemach plików skuteczne może być usuwanie plików w celu oznaczenia ich jako „martwych” zamiast natychmiastowego odzyskiwania wszystkich ich bloków danych.
Wady używania reliktów obejmują narzut obliczeniowy i dodatkowe zużycie pamięci: dodatkowe przetwarzanie jest konieczne do prześledzenia ścieżki od wskaźnika do danych przez relikt, a dodatkowa pamięć jest niezbędna do zachowania reliktów dla każdego wskaźnika w całym programie. Innym problemem jest to, że cały kod, który musi działać z danymi wskaźnikami, musi zostać zaimplementowany w celu użycia mechanizmu reliktu.
Wśród popularnych języków programowania C++ implementuje wzorzec tombstone w swojej standardowej bibliotece jako słaby wskaźnik przy użyciu std::weak_ptr. Wbudowana obsługa języków programowania lub kompilatora nie jest konieczna do korzystania z tego mechanizmu.