Эта статья включает в себя список литературы , связанной литературы или внешних ссылок , но ее источники остаются неясными, поскольку в ней отсутствуют встроенные цитаты . ( Май 2016 г. ) ( Узнайте, как и когда удалить этот шаблон сообщения ) |
Эта статья требует дополнительных ссылок для проверки . ( май 2016 г. ) ( Узнайте, как и когда удалить этот шаблон сообщения ) |
Теневая память - это метод, используемый для отслеживания и хранения информации в памяти компьютера, используемой программой во время ее выполнения. Теневая память состоит из теневых байтов, которые отображаются на отдельные биты или один или несколько байтов в основной памяти. Эти теневые байты обычно невидимы для исходной программы и используются для записи информации об исходной части данных.
Этот метод используется программами проверки ошибок памяти, которые могут хранить информацию о том, какие части памяти были выделены проверяемой программе. Эта теневая память затем используется для обнаружения и сообщения о неправильных доступах к памяти, даже если программа может не дать сбой из-за ошибки сегментации или подобного. Средство проверки ошибок может также хранить дополнительную информацию в памяти, например, какие биты определены, а какие нет. 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