c++ optimization memory-management boost malloc

c++ - ¿Alguna vez ha obtenido una aceleración significativa al usar boost:: pool?



malloc c (4)

He jugado con boost :: pool algunas veces en lugares en los que me parecía que estaba trabajando duro con una gran cantidad de objetos "churn". En general, he usado boost::object_pool , o boost::pool_alloc como un parámetro de plantilla STL. Sin embargo, el resultado es invariablemente que el rendimiento prácticamente no se modifica o empeora significativamente.

Tengo curiosidad de escuchar historias de éxito con eso.

¿Qué tipo de cosas debería buscar en la creación de perfiles que puedan indicar que boost :: pool probablemente ayude?

¿Es bastante difícil mejorar el malloc viejo?


Es posible que desee rastrear sus problemas de rendimiento a las asignaciones de memoria antes de comenzar a optimizar para eso.

Por lo tanto, reduzca su perfil para identificar la ubicación del problema. Esto puede ser un montón de llamadas al mismo código que puede no tomar mucho tiempo cuando solo se llama una vez.


Las agrupaciones de memoria son más efectivas para el procesamiento de estilo de transacción, donde puede asignar al grupo y luego, cuando se realiza la transacción, simplemente colóquelo en el olvido. La verdadera aceleración no es que cada asignación vaya a ser mucho más rápida, ya que tendrá una fragmentación de memoria casi nula en una aplicación de ejecución extremadamente larga.

En tipo, parece que sus aplicaciones no garantizan el uso de agrupaciones de memoria



Sí, 500% de aumento de velocidad. La aplicación (más bien estúpidamente, pero a veces tienes que trabajar con lo que obtuviste) copió elementos de 1 std :: map a otro en un bucle (hubo algunas decisiones en el bucle), y las asignaciones resultantes en servidores multiproceso / proceso resultó en contención de montón. Agregué el conjunto de impulso como un asignador en el segundo mapa y el resultado fue un aumento del 500% en la velocidad de ejecución de la aplicación.