Tengo una clase pequeña (16 bytes en un sistema de 32 bits) que necesito asignar dinámicamente. En la mayoría de los casos, la vida útil de cualquier instancia dada es muy corta. Algunas instancias también pueden pasar a través de límites de subprocesos.Asignación eficiente de muchos objetos pequeños de vida corta
Después de haber hecho algunos perfiles, descubrí que mi programa parece estar dedicando más tiempo a asignar y desasignar las cosas que a gastar en usarlas, así que quiero reemplazar las nuevas predeterminadas y eliminarlas con algo que sea un poco más eficiente.
Para un objeto grande (conexiones db, que son costosas de construir en lugar de asignar), ya estoy usando un sistema de agrupación, sin embargo, eso implica una lista para almacenar los objetos "gratuitos" y también un mutex para seguridad de hilo. Entre el mutex y la lista en realidad funciona peor que con el nuevo/eliminar básico para los objetos pequeños.
me encontré con una serie de pequeños asignadores de objetos en Google, sin embargo, parecen estar utilizando un conjunto global/estática que no se utiliza de una manera segura hilo, que los hace inadecuados para mi uso :(
¿Qué otra tengo opciones para una gestión de memoria eficiente de objetos tan pequeños?
Si objeta es muy pequeño, ¿por qué no simplemente pasar por valor? Además, ¿sus pequeños objetos son iguales, o son todos diferentes? Si es el primero, consulte boost.flyweight – KitsuneYMG
Hay poca evidencia en su pregunta que sugiera que realmente puede hacerlo mejor. ¿Qué te hace pensar que haces? –
Cuando escribe mutex, ¿quiere decir en general o mutex en particular? Si en particular, entonces CriticalSection será mejor siempre que no cruce los límites del proceso. –