Я использую adjacency_list
широко. У меня так много графиков загружено одновременно, что память
становится проблемой. Я делаю статический анализ программы и сохраняю
callgraph и потоковые диаграммы дизассемблированного двоичного файла в графах наддува.
Таким образом, я могу иметь несколько десятков тысяч функций == flowgraphs и один
гигантский каллиграф. Я действительно хотел бы уменьшить использование памяти для моего
графики, все еще используя BGL.
Так как мои графики статичны после загрузки и числа ребер и вершин
Заранее известны, я вижу огромный потенциал для оптимизации. За
Например, я хотел бы выделить один буфер для всех вершин / ребер
одного графа и пусть граф просто хранит индексы в этом буфере.
больше вопросов:
1) Каковы затраты памяти на использование свойств вершин и ребер? я
их немало.
2) можно ли убедить BGL использовать усадку, чтобы соответствовать
идиома? Как я понимаю, списки смежности используют push_back для добавления
кромки. Можно ли уменьшить использование памяти путем замены
результирующий вектор с копией самого себя? Может быть, копируя весь
график?
3) Можно ли использовать распределители пулов наддува с BGL? Как далеко
как я могу сказать, BGL в настоящее время выполняет множество небольших распределений -
Я действительно хотел бы избежать этого по соображениям эффективности пространства и времени выполнения.
Кто-нибудь уже создал версию BGL, оптимизированную для использования памяти?
Стоит ли использовать существующие графовые структуры и дополнить их
Пользовательские распределители или что-то такое, или это более плодотворно, чтобы написать свой собственный
реализация и стараться оставаться интерфейсом совместимым с BGL так
Я могу продолжать использовать его алгоритмы?
С наилучшими пожеланиями,
Sören