He estado haciendo algunos análisis de rendimiento en el software que desarrollo, y he encontrado que las búsquedas en un diccionario global de URL toman aproximadamente el 10% del tiempo de fase de "carga" de la aplicación. El diccionario se implementa como C++ STL std :: map, que tiene búsquedas O (lg n). Voy a moverlo a hash_map, que tiene aproximadamente búsquedas de tiempo fijo. La clase stl string no tiene una propiedad de código hash, y ciertamente no almacena en caché un código hash. Eso significa que cada búsqueda requiere volver a generar el código hash.¿Debería almacenar en caché el código hash de una cadena STL utilizada como clave hash?
Soy escéptico de que el almacenamiento en memoria caché del código hash valga la pena. Significaría cambiar muchas líneas de código para usar una nueva clase de cadena con una propiedad de código hash en caché. Dado que la implementación actual registra (n) comparaciones completas de cadenas en cada búsqueda, creo que reducirla a básicamente un recorrido de cadenas (por la función de hash) por búsqueda es una gran ganancia.
¿Alguien tiene experiencia con los códigos hash de cadena de almacenamiento en caché? ¿Ha probado alguna vez que vale la pena el esfuerzo?
Hashing toma muy poco tiempo. ¿Cómo piensas mantener estos hachís de cadena en la memoria caché? Quiero decir, si mantienes una cadena que ya tiene el hash, ¿por qué no mantener el objeto asociado con ese hash? – GManNickG
¿No puedes envolver tus cadenas en un objeto auxiliar que mantiene el hash? – Skurmedel
Además, no use 'hash_map', esa es la extensión anterior. Use 'unordered_map' en su lugar, ya sea en TR1 o Boost. – GManNickG