¿Memoización, almacenamiento en caché, almacenamiento en búfer y archivo de páginas?

7

Estoy escribiendo algo sobre cómo la Fibonacci iterativa es sustancialmente mejor que la Fibonacci recursiva: unas pocas líneas. La principal razón de esto que encuentro, al igual que muchos investigadores prominentes que creo, es que no se vuelven a calcular los valores: espacio frente al tiempo. A partir de esto pensé ¡ah! almacenando en caché! Pero no estoy seguro de si es el almacenamiento en caché, la memoria, el almacenamiento en búfer o uno de los otros.

Personalmente, creo que el almacenamiento en búfer es la precarga del material antes de que se haga algo con él, mientras que el almacenamiento en caché y la memorización son más una cosa basada en el procesamiento. La noción de almacenamiento en búfer es que obtengo de tal almacenamiento en búfer una imagen o un video.

¿Cuál es la diferencia entre almacenamiento en búfer, memorización, almacenamiento en caché y archivo de páginas?

    
pregunta Eiyrioü von Kauyf 25.04.2012 - 18:17

2 respuestas

6

El almacenamiento en caché está relacionado con todos los otros conceptos que mencionó, si hablara de una jerarquía de conceptos, el almacenamiento en caché sería el concepto principal y la memoria, algunas formas de almacenamiento en búfer y los archivos de páginas son formas específicas de almacenamiento en caché.

La memorización es almacenar valores precalculados y luego usarlos para buscar valores en lugar de perder tiempo para volver a calcularlos. (intercambio de tiempo vs espacio)

Almacenamiento en búfer Supongo que se refiere a cosas como IO en búfer, que se puede usar en software o hardware. En el código, puede usar flujos en búfer como en Java o C #, que mantendrá cierta cantidad de datos en la memoria para que los programas no tengan que esperar a que la red o el acceso al disco sean lentos. Esto no es específicamente el almacenamiento en caché.

Los buffers de hardware como en los discos duros almacenarán en caché una pequeña cantidad de datos para un acceso rápido. Estos se controlan mediante algoritmos y predicciones de que si los datos se usaron muy recientemente, probablemente se volverán a utilizar muy pronto.

Los archivos de página son un poco diferentes: es un caché, pero es principalmente para resolver el problema de lo que sucede cuando su programa necesita tener muchos datos en la memoria, pero no hay suficiente memoria para almacenar esos datos. En entornos con muchos programas diferentes en ejecución, se crearon archivos de página para resolver este problema, por lo que es posible que tenga una RAM muy limitada (compartida por todas las aplicaciones) pero que haya un espacio de almacenamiento significativamente mayor que podría usarse de manera transparente para almacenar datos del programa además de RAM (pero significativamente más lento).

Sin embargo, como mencionó Peter Smith, los algoritmos iterativos frente a los recursivos no se memorizan intrínsecamente ni nada (a menos que esté usando construcciones o lenguajes que usen una memoria transparente). Las llamadas de función recursiva requieren llamadas de función exponencial en la pila y, a menos que su idioma / compilador utilice la eliminación de la recursión de cola, esto puede ser más lento y también provocar desbordamientos de pila.

Puedes memorizar soluciones recursivas o iterativas.

    
respondido por el wkl 25.04.2012 - 18:54
0

La fibonacci iterativa frente a la fibonacci recursiva tiene más que ver con el hecho de que los compiladores por lo general no transforman las funciones recursivas del extremo de la cola en funciones iterativas. La diferencia entre estos dos es mantener sus variables en la pila (y en la memoria) para que sean recursivas, y mantener dos variables en los registros ahorrando toneladas de accesos a la memoria para iterativos.

No es una memorización ya que no se mantiene una tabla de valores precalculados (lo que se podría hacer en cualquier escenario). La memorización y el almacenamiento en caché para mí son casi lo mismo, ambos implican el almacenamiento de resultados precomputados bajo una clave, a menos que al almacenar en caché usted se preocupe por los cachés de la CPU física y se preocupe por la alineación del caché.

El almacenamiento en búfer es simplemente llenar el espacio de memoria a través de la entrada / salida de un dispositivo lento, como una red o un disco duro, frente al procesamiento de bytes de byte a byte, que es lento debido a la gran cantidad de accesos de entrada / salida.

    
respondido por el Peter Smith 25.04.2012 - 18:42

Lea otras preguntas en las etiquetas