¿Hay alguna forma de llenar la RAM libre en una máquina Linux con datos aleatorios?memoria de relleno con datos aleatorios
La razón por la que estoy preguntando esto: estoy trabajando en un grupo donde hacemos programación numérica en Fortran. A veces, las personas se equivocan al trabajar con reales de doble precisión, por lo que los programas que deberían dar resultados de doble precisión solo brindan una precisión única.
Si mi comprensión es correcta, se verían fluctuaciones aleatorias del resultado después del límite de precisión simple en dicho programa. Es decir, si ejecuta el mismo programa con la misma entrada varias veces, obtiene resultados aleatorios diferentes cada vez. Lo que ve (la parte aleatoria) depende de los valores aleatorios en la memoria RAM libre de la máquina. Pero en la práctica, si ejecuta el programa repetidamente en la misma máquina, las mismas partes de la memoria tienden a ser utilizadas repetidamente, que tienen los mismos datos aleatorios en ellas, llevando la misma salida cada vez.
Mi idea es que si pudiera sobreescribir la memoria con datos aleatorios, realmente vería las fluctuaciones aleatorias en la salida de su programa. Eso haría mucho más fácil encontrar estos errores.
¿Es esta idea golpe, o si no, cómo llené la memoria? ¿Puedo canalizar/dev/random en la RAM, o algo así?
La memoria dada a un proceso se inicializa (con datos del disco) o se pone a cero antes de ser utilizada. Sin excepciones. Entonces, todo lo que puedes hacer aquí es aleatorizar la memoria desde dentro del programa en cuestión. – bdonlan
Estoy algo seguro de que no es ... Especialmente en cadenas que no se inicializaron, veo esa 'basura binaria' todo el tiempo ... puede ser que la memoria se inicialice al principio, y que la basura sea de memoria reutilizar dentro del programa, pero en cualquier caso, puede haber datos aleatorios. –
Después de revisar las preguntas, veo que estás tratando con una aplicación heredada y necesitas depurarla, e idealmente quieres depurarla "en su lugar", y una forma simple e ingeniosa sería aleatorizar la datos. Sin embargo, no sé si esto es posible. Probablemente te beneficie romper el código que hace retornos dobles/únicos numéricos a su propio tipo de módulo, interconectarlo con un marco de prueba unitario y ejecutarlo de esa manera. Puede tomar mucho trabajo, pero podría probar que los números se devuelven con precisión de esa manera. Simplemente no veo esto como algo fácil. –