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