Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

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

Теневая память может быть реализована и использована множеством разных способов и иметь разные характеристики производительности. Например, Memcheck отслеживает значения с битовой точностью, в то время как 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