Теневая память

редактировать

Теневая память - это метод, используемый для отслеживания и хранения информации в памяти компьютера используется программой во время ее выполнения. Теневая память состоит из теневых байтов, которые отображаются на отдельные биты или один или несколько байтов в основной памяти. Эти теневые байты обычно невидимы для исходной программы и используются для записи информации об исходной части данных.

Этот метод используется программами проверки ошибок памяти, которые могут хранить информацию о том, какие части памяти были выделены для проверяемой программы. Эта теневая память затем используется для обнаружения и сообщения о неправильных доступах к памяти, даже если программа может не дать сбой из-за ошибки сегментации или подобного. Средство проверки ошибок может также хранить дополнительную информацию в памяти, например, какие биты определены, а какие нет. Memcheck, часть пакета Valgrind, использует это для обнаружения неопределенного поведения, возникающего в результате воздействия или печати неопределенных значений памяти.

Использование теневой памяти, однако, не ограничивается программами проверки ошибок памяти, поскольку информация, хранящаяся в этих теневых байтах, не фиксируется. Например, он используется детектором гонки данных.

Теневая память может быть реализована и использована множеством разных способов и иметь разные характеристики производительности. Например, Memcheck отслеживает значения с точностью bit, а AddressSanitizer, часть компилятора clang, сравнительно очень быстро. Memcheck, как и все инструменты Valgrind, использует двоичную трансляцию и инструментарий для запуска кода, управляющего теневой памятью, соответствующей использованию программной памяти. AddressSanitizer, с другой стороны, создается во время компиляции и вставляет код проверки ошибок в программу во время компиляции. Его реализация с теневой памятью использует огромные резервы виртуальной памяти для теневой памяти, что дает очень разные характеристики производительности.

Ссылки
  • Nethercote, N.; Сьюард, Дж. (2007). «Как затенять каждый байт памяти, используемый программой». Как затенять каждый байт памяти, используемый программой. В материалах 3-й международной конференции по виртуальным средам выполнения (Сан-Диего, Калифорния, США). VEE '07. ACM New York (опубликовано 13–15 июня 2007 г.). С. 65–74. CiteSeerX 10.1.1.643.7117. DOI : 10.1145 / 1254810.1254820. ISBN 9781595936301. S2CID 10263496.
  • http://research.google.com/pubs/pub37752.html
Последняя правка сделана 2021-06-08 02:42:30
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте