Używam obszernej listy adjacency_list < vecS, vecS, bidirectionalS ...> . Mam tyle wykresów załadowanych jednocześnie, że pamięć staje się problemem. Robię statyczną analizę programu i przechowuje kalibrację i wykresy przepływu zdemontowanego pliku binarnego na wykresach doładowania. Dzięki temu mogę mieć kilka tysięcy funkcji == grafy przepływów i jeden gigantyczny callgraph . Naprawdę chciałbym zmniejszyć zużycie pamięci dla moich wykresów , nadal korzystając z BGL.zmniejszanie wymagań dotyczących pamięci dla listy rozgraniczeń
Ponieważ moje wykresy są statyczne po załadowaniu, a liczba krawędzi i wierzchołków jest znana wcześniej, widzę ogromny potencjał optymalizacji. Dla przykładu, chciałbym przydzielić pojedynczy bufor dla wszystkich wierzchołków/krawędzi pojedynczego wykresu i pozwolić, aby wykres właśnie zapisywał indeksy do tego bufora.
więcej pytań:
1) jaki jest koszt pamięci związany z używaniem właściwości wierzchołków i krawędzi? I ma ich sporo.
2) Czy można przekonać BGL, aby użył obkurczenia w celu dopasowania do idiomu ? Jak rozumiem, listy przylegania używają funkcji push_back, aby dodać krawędzie . Czy można zmniejszyć zużycie pamięci, zamieniając wektor wynikowy na kopię samego siebie? Może kopiując cały wykres ?
3) Czy możliwe jest użycie podzielników puli boost z BGL? Jak na razie , ponieważ mogę powiedzieć, że BGL obecnie wykonuje wiele małych alokacji - Naprawdę chciałbym tego uniknąć ze względów związanych z wydajnością przestrzeni i wydajności.
Czy ktoś już zbudował wersję BGL zoptymalizowaną pod kątem użycia pamięci? Czy powinienem spróbować użyć istniejących struktur wykresów i rozszerzyć je o niestandardowych alokatorów lub somesuch, czy jest to bardziej owocne, aby napisać własną implementację i starać się zachować zgodność interfejsu z BGL, aby móc nadal używać jego algorytmów?
pozdrawiam,
Sören
To nie może być odpowiedź chcesz, ale jeśli chodzi o bajtów liczenia jako przygotowanie do niektórych hacking w jakiejś biblioteki Boost, który jest używany tylko dla nielicznych zadania - szybciej uzyskasz lepszą odpowiedź na liście dyskusyjnej "Zwiększ listę użytkowników". Inną możliwością jest odczytanie źródła ... –
gimpf