Estoy usando adjacency_list < vecS, vecS, bidireccionales ...> ampliamente. Tengo tantos gráficos cargados a la vez que la memoria se convierte en un problema. Estoy haciendo un análisis de programa estático y almacenando el diagrama de call y los gráficos de flujo del binario desensamblado en los gráficos de impulso. Así puedo tener varias diez mil funciones == flowgraphs y un callgraph gigantesco. Realmente me gustaría reducir el uso de memoria para mis gráficos mientras sigo usando el BGL.reduciendo los requisitos de memoria para la lista de adyacencia
Dado que mis gráficos son estáticos después de la carga y los recuentos de flancos y vértices son conocidos de antemano, veo un gran potencial para la optimización. Para el ejemplo , me gustaría asignar un único búfer para todos los vértices/bordes de un solo gráfico y dejar que el gráfico simplemente almacene índices en ese búfer.
más preguntas:
1) ¿Cuál es la sobrecarga de memoria al usar las propiedades de vértice y borde? I tienen bastantes de ellos.
2) ¿es posible convencer al BGL de que use la contracción para ajustarse al idioma ? Según tengo entendido, las listas de adyacencia usan push_back para agregar bordes . ¿Es posible reducir el uso de memoria intercambiando el vector resultante con una copia de sí mismo? ¿Tal vez mediante la copia de todo el gráfico ?
3) ¿Es posible utilizar asignadores de grupo de impulso con BGL? Hasta ahora, ya que puedo decir que BGL actualmente realiza muchas asignaciones pequeñas - Realmente me gustaría evitar eso por razones de espacio y eficiencia de tiempo de ejecución.
¿Alguien ya ha creado una versión BGL optimizada para el uso de la memoria? ¿Debo intentar usar las estructuras de gráficos existentes y aumentarlo con asignadores personalizados o somesuch o es más fructífero escribir mi propia implementación y tratar de mantener la interfaz compatible con el BGL así que puedo seguir utilizando sus algoritmos?
mejores deseos,
Sören
Puede que no sea la respuesta que quiera, pero cuando se trata de bytes de recuento como preparación para alguna piratería en alguna biblioteca impulso que sólo se utiliza para muy pocos Tareas: obtendrá una mejor respuesta antes en la Lista de correo de usuarios de Boost. Otra posibilidad es leer la fuente ... –
gimpf