2011-02-08 14 views

Respuesta

10

Una matriz débil es una matriz de punteros débiles. Un puntero débil es una referencia sobre un valor que puede ser basura recolectada.

Si usa un puntero regular sobre un valor, evitará su recolección de basura hasta que el árbitro sea la basura recolectada. Con una referencia débil, el valor puede ser recolectado antes del árbitro.

Un ejemplo de uso es una fuente que alimenta datos a múltiples sumideros. Si la fuente contiene punteros regulares a los sumideros, cada vez que un fregadero ya no se necesite, no se recolectará basura hasta que la fuente esté (lo cual, por ejemplo, nunca puede suceder). Si la fuente utiliza referencias débiles a los sumideros, los sumideros dados pueden ser recolectados antes de la fuente.

Otro ejemplo es hashconsing para un tipo que utiliza hashtables débiles (que implican matrices débiles). Rápidamente, hashconsing es una forma de recordar todos los valores de un tipo determinado que se crean y viven en el programa. Junto con un constructor de valores apropiado, esto puede garantizar el máximo intercambio de valores de ese tipo y permite implementar la igualdad estructural en ese tipo como igualdad física. En ese caso, si se usa una tabla hash no débil, los valores que el programa ya no use nunca serán basura.

Finalmente, muchas personas piensan (erróneamente) que las referencias débiles son útiles para implementar cachés. Mantenga una referencia débil sobre un valor, si fue basura recolectada, vuelva a cargar/recalcular el valor. Este no es un buen algoritmo de caché porque una gran colección de basura recupera cualquier valor que ya no se referencia. Por lo tanto, su algoritmo de almacenamiento en caché no tiene predictibilidad ni propiedades útiles, como, por ejemplo, que el tamaño de la memoria caché/disponible no exceda una proporción determinada.

+0

Muy buena respuesta, ¡gracias! – Yttrill

1

Utilice un par biyectivo de funciones de mapa entre su estructura de datos y su representación estructuralmente congruente que sea compatible con el módulo Marshall.

+0

No puedo darle un tic también, James, aunque me gustaría. Ver siguiente ... – Yttrill

+0

El problema es que esta es una tabla de símbolos para el esquema OCS, lo obvio que se debe guardar es la expresión s antes de la compilación. El problema es que "guardar" es parte de Dypgen, guardando un autómata, y no puedo desconectar fácilmente el esquema compilado del autómata. – Yttrill

+0

De hecho, podría hacerlo asignando un entero a cada acción del Analizador, guardar eso y guardar las expresiones s por separado antes de la compilación. Pero luego tengo el problema: ¿cómo evito recompilar el código del esquema cada vez que se reduce la producción? – Yttrill

Cuestiones relacionadas