La memoria instantánea es una técnica utilizada para rastrear y almacenar información en la memoria de la computadora utilizada por un programa durante su ejecución. La memoria de sombra consta de bytes de sombra que se asignan a bits individuales o uno o más bytes en la memoria principal. Estos bytes de sombra suelen ser invisibles para el programa original y se utilizan para registrar información sobre el dato original.
La técnica es utilizada por verificadores de errores de memoria que pueden almacenar información sobre qué partes de la memoria se han asignado al programa que se está verificando. Esta memoria oculta se utiliza para detectar y notificar accesos incorrectos a la memoria, aunque es posible que el programa no se bloquee debido a una falla de segmentación o similar. Un verificador de errores también puede almacenar información adicional en la memoria, como qué bits se han definido y cuáles no. Memcheck , parte de la suite Valgrind , utiliza esto para detectar el comportamiento indefinido resultante de actuar o imprimir valores de memoria indefinidos.
Sin embargo, el uso de la memoria de sombra no se limita a los verificadores de errores de memoria, ya que la información que se almacena en estos bytes de sombra no es fija. Por ejemplo, lo utiliza ThreadSanitizer , un detector de carrera de datos .
La memoria instantánea se puede implementar y utilizar de muchas formas diferentes, y tiene diferentes características de rendimiento. Memcheck, por ejemplo, rastrea los valores con precisión de bits , mientras que AddressSanitizer , parte del compilador clang , es comparativamente muy rápido. Memcheck, como todas las herramientas de Valgrind, usa traducción e instrumentación binaria para ejecutar código manipulando la memoria secundaria correspondiente al uso de la memoria del programa. AddressSanitizer, por otro lado, se crea en tiempo de compilación e inserta código de verificación de errores en línea en un programa durante la compilación. Su implementación de memoria en la sombra utiliza una gran reserva de memoria virtual para su memoria en la sombra, dando características de rendimiento muy diferentes.
Referencias
- Nethercote, N .; Seward, J. (2007). "Cómo sombrear cada byte de memoria utilizado por un programa". Cómo sombrear cada byte de memoria utilizado por un programa. En Actas de la 3ª Conferencia internacional sobre entornos de ejecución virtual (San Diego, California, EE . UU . ) . VEE '07 . ACM New York (publicado del 13 al 15 de junio de 2007). págs. 65–74. CiteSeerX 10.1.1.643.7117 . doi : 10.1145 / 1254810.1254820 . ISBN 9781595936301. S2CID 10263496 .
- http://research.google.com/pubs/pub37752.html