Теневая память - Shadow memory

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

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

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

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

Рекомендации

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