Надгробие (программирование)

Техника компьютерного программирования

Надгробия — это механизм обнаружения висячих указателей и смягчения проблем, которые они могут вызывать в компьютерных программах. Висячие указатели могут появляться в некоторых языках программирования , например , C , C++ и языках ассемблера .

Надгробие — это структура, которая действует как посредник между указателем и его целью, часто динамическими данными кучи в памяти . Указатель — иногда называемый дескриптором — указывает только на надгробия и никогда на свою фактическую цель. Когда данные освобождаются, надгробие устанавливается в ноль ( или, в более общем смысле, в значение, которое является недопустимым для указателя в данной среде выполнения), указывая, что переменная больше не существует. [1] Этот механизм предотвращает использование недействительных указателей, которые в противном случае получили бы доступ к области памяти, которая когда-то принадлежала теперь освобожденной переменной, хотя она уже может содержать другие данные, что, в свою очередь, приводит к повреждению данных в памяти. В зависимости от операционной системы , ЦП может автоматически обнаруживать такой недействительный доступ (например, для значения null: ошибка разыменования нулевого указателя ). Это помогает при анализе фактической причины, ошибки программирования, при отладке , а также может использоваться для прерывания программы в производственном использовании, чтобы предотвратить ее продолжение с недействительными структурами данных.

В более общих терминах надгробие можно понимать как маркер «этих данных больше нет». Например, в файловых системах может быть эффективно при удалении файлов помечать их как «мертвые» вместо немедленного восстановления всех их блоков данных. [2]

Недостатки использования надгробий включают вычислительные издержки и дополнительное потребление памяти: необходима дополнительная обработка для отслеживания пути от указателя к данным через надгробие, а также дополнительная память необходима для сохранения надгробий для каждого указателя по всей программе. Еще одна проблема заключается в том, что весь код, который должен работать с рассматриваемыми указателями, должен быть реализован для использования механизма надгробий. [3]

Среди популярных языков программирования C++ реализует шаблон tombstone в своей стандартной библиотеке как слабый указатель с использованием std::weak_ptr. Встроенная поддержка языков программирования или компилятора не является обязательной для использования этого механизма.

Смотрите также

Ссылки

  1. ^ Майкл Ли Скотт (2000). Прагматика языка программирования. Морган Кауфманн . стр. 392. ISBN 9781558604421.
  2. ^ Клиффорд А. Шаффер (2012). Структуры данных и анализ алгоритмов в C++, третье издание. Dover Publications . стр. 344. ISBN 9780486172620.
  3. ^ Маурицио Габбриелли; Симоне Мартини (2010). Языки программирования: принципы и парадигмы. Springer London . стр. 248. ISBN 9781848829145.
Retrieved from "https://en.wikipedia.org/w/index.php?title=Tombstone_(programming)&oldid=1243406053"