Надгробия - это механизм для обнаружения висящих указателей, которые могут появляться в определенных языках программирования , например. грамм. C , C ++ и языки ассемблера , чтобы сдерживать их опасные последствия.
Надгробие - это структура, которая действует как посредник между указателем и динамическими данными кучи в памяти . Указатель - иногда называемый дескриптором - указывает только на надгробные камни и никогда не указывает на память, в которой хранится фактическое значение. Когда данные освобождаются, для метки-захоронения устанавливается значение NULL (или, в более общем смысле, значение, недопустимое для указателя в данной среде выполнения), что указывает на то, что переменная больше не существует. [1]Это предотвращает использование недействительных указателей, которые в противном случае могли бы получить доступ к области памяти, которая когда-то принадлежала теперь освобожденной переменной, хотя она может уже содержать другие данные, что, в свою очередь, приведет к повреждению данных в памяти. В зависимости от операционной системы , то процессор может автоматически обнаруживать такой недопустимый доступ (например для значения нуля.:. Ошибки разыменования указателя NULL ). Это помогает анализировать фактическую причину, ошибку программирования, отладку , а также может использоваться для прекращения использования программы в производственной среде, чтобы предотвратить ее продолжение с недопустимыми структурами данных.
В более общем плане надгробие можно понимать как маркер «этих данных больше нет». Например, в файловых системах при удалении файлов может быть эффективным пометить их как «мертвые» вместо немедленного восстановления всех их блоков данных. [2]
К недостаткам использования надгробий относятся накладные расходы на вычисления и дополнительное потребление памяти: необходима дополнительная обработка, чтобы проследить путь от указателя к данным через надгробие, и дополнительная память необходима для сохранения надгробий для каждого указателя во всей программе. Еще одна проблема заключается в том, что весь код, который должен работать с указателями, о которых идет речь, должен быть реализован для использования механизма захоронения. [3]
В настоящее время ни один из популярных языков программирования не использует надгробия. Однако для их использования не требуется встроенная поддержка со стороны языка программирования или компилятора.
Смотрите также
Рекомендации
- ^ Майкл Ли Скотт (2000). Прагматика языка программирования . Морган Кауфманн . п. 392. ISBN. 9781558604421.
- ^ Клиффорд А. Шаффер (2012). Структуры данных и анализ алгоритмов в C ++, третье издание . Dover Publications . п. 344. ISBN 9780486172620.
- ^ Маурицио Габбриелли; Симоне Мартини (2010). Языки программирования: принципы и парадигмы . Springer London . п. 248. ISBN 9781848829145.