我正在广泛使用 adjacency_list< vecS, vecS, bidirectionalS ... >。我一次加载了这么多图表,以至于内存成为问题。我正在进行静态程序分析,并将反汇编二进制文件的调用图和流程图存储在升压图中。因此我可以拥有数万个函数==流程图和一个巨大的调用图。我真的很想在仍然使用 BGL 的同时减少图表的内存使用量。
由于我的图表在加载后是静态的,并且事先知道边和顶点数,我看到了巨大的优化潜力。例如,我想为单个图的所有顶点/边分配一个缓冲区,并让图只将索引存储到该缓冲区中。
更多问题:
1)使用顶点和边属性的内存开销是多少?我有很多。
2)是否有可能说服 BGL 使用收缩来适应成语?据我了解,邻接列表使用 push_back 来添加边。是否可以通过将结果向量与自身的副本交换来减少内存使用?也许通过复制整个图表?
3) 是否可以在 BGL 中使用提升池分配器?据我所知,BGL 目前执行了大量的小分配——出于空间和运行时效率的原因,我真的很想避免这种情况。
是否有人已经构建了针对内存使用优化的 BGL 版本?我应该尝试使用现有的图形结构并使用自定义分配器或类似的东西来增加它,还是编写我自己的实现并尝试保持与 BGL 的接口兼容以便我可以继续使用它的算法?
最好的祝福,
Sören