Jump to content

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

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

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

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

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

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

См. также

[ редактировать ]
  1. ^ Майкл Ли Скотт (2000). Прагматика языков программирования . Морган Кауфманн . п. 392. ИСБН  9781558604421 .
  2. ^ Клиффорд А. Шаффер (2012). Структуры данных и алгоритмический анализ в C++, третье издание . Дуврские публикации . п. 344. ИСБН  9780486172620 .
  3. ^ Маурицио Габбриелли; Симоне Мартини (2010). Языки программирования: принципы и парадигмы . Спрингер Лондон . п. 248. ИСБН  9781848829145 .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: b34937e38ca4ba4849d9868cc4c574cd__1679384280
URL1:https://arc.ask3.ru/arc/aa/b3/cd/b34937e38ca4ba4849d9868cc4c574cd.html
Заголовок, (Title) документа по адресу, URL1:
Tombstone (programming) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)