Tombstone (programmering)
Gravstenar är en mekanism för att upptäcka hängande pekare och mildra problemen de kan orsaka i datorprogram. Dingelpekare kan förekomma i vissa datorprogrammeringsspråk , t.ex. C , C++ och assemblerspråk .
En gravsten är en struktur som fungerar som en mellanhand mellan en pekare och dess mål, ofta högdynamisk data i minnet . Pekaren – ibland kallad handtaget – pekar bara på gravstenar och aldrig mot dess faktiska mål. När data avallokeras sätts gravstenen till en noll (eller, mer generellt, till ett värde som är olagligt för en pekare i den givna körtidsmiljön), vilket indikerar att variabeln inte längre existerar. Denna mekanism förhindrar användningen av ogiltiga pekare, som annars skulle komma åt minnesområdet som en gång tillhörde den nu avallokerade variabeln, även om den redan kan innehålla andra data, vilket i sin tur leder till korruption av data i minnet. Beroende på operativsystemet kan CPU :n automatiskt upptäcka en sådan ogiltig åtkomst (t.ex. för nullvärdet: ett nollpekarereferensfel) . Detta stöder analysen av den faktiska orsaken, ett programmeringsfel, vid felsökning , och det kan också användas för att avbryta programmet i produktionsanvändning, för att förhindra att det fortsätter med ogiltiga datastrukturer.
I mer generaliserade termer kan en gravsten förstås som en markör för "denna data finns inte längre här". I filsystem kan det till exempel vara effektivt när man tar bort filer att markera dem som "döda" istället för att omedelbart återta alla deras datablock.
Nackdelarna med att använda gravstenar inkluderar en beräkningsoverhead och extra minnesförbrukning: extra bearbetning är nödvändig för att följa vägen från pekaren till data genom gravstenen, och extra minne är nödvändigt för att behålla gravstenar för varje pekare genom hela programmet. Ett annat problem är att all kod som behöver fungera med pekarna i fråga måste implementeras för att använda gravstensmekanismen.
Bland populära programmeringsspråk implementerar C++ gravstensmönstret i sitt standardbibliotek som en svag pekare med std::weak_ptr. Inbyggt stöd av programmeringsspråk eller kompilatorn är inte nödvändigt för att använda denna mekanism.