Kiedy należy preferować pulę obiektów nad dynamicznie przydzielonymi obiektami?Pula obiektów a alokacja dynamiczna
Potrzebuję tworzyć i niszczyć tysiące obiektów na sekundę. Czy samemu wystarczy zdecydować się na pulę obiektów?
Dzięki.
Kiedy należy preferować pulę obiektów nad dynamicznie przydzielonymi obiektami?Pula obiektów a alokacja dynamiczna
Potrzebuję tworzyć i niszczyć tysiące obiektów na sekundę. Czy samemu wystarczy zdecydować się na pulę obiektów?
Dzięki.
Przewidywany koszt zniszczenia obiektu, alokacji, alokacji i budowy jest wyższy niż koszt reinicjalizacji do nowego użytku.
Powiedziałbym "może być niski" - jest to całkowicie możliwe (nawet prawdopodobne), że inicjalizacja jest drogim etapem. –
Przeformułowałem moją odpowiedź. Odczytując inne odpowiedzi, wydaje mi się, że jako jedyny robię różnicę między pulą obiektów (gdzie zachowana jest lista skonstruowanych obiektów do użycia) i pulą pamięci (która jest techniką zarządzania pamięcią, w której opóźnia się dealokację - i czasami zniszczenie, czasami zniszczenie nie jest dokonywane - tak, aby zostało zrobione jednym krokiem). – AProgrammer
Nie jestem pewien, czy rozumiem, co tu mówisz. Zawsze myślałem, że korzyści płynące z puli obiektów to tylko ponowne wykorzystanie pamięci? Wszystkie nowe obiekty muszą zostać skonstruowane, a wszystkie stare obiekty i tak zniszczone - nie możesz zaoszczędzić w tym czasie? –
Generalnie, jeśli tworzysz i niszczycie tysiące obiektów na sekundę, powinieneś przynajmniej użyć puli obiektów.
Można użyć niestandardowego programu przydzielającego, który przydziela wyłącznie obiekty o określonym rozmiarze. Zastąp nową i wstępnie przydzielaj stertę specjalnie dla twoich obiektów. Użycie pola bitowego i tablicy jest stosunkowo proste.
Zasadniczo niestandardowa sterta jest bardziej wydajna pod względem pamięci, jeśli obiekty są małe (narzut sterty jest dość wysoki w stosunku do rozmiaru małych obiektów); Jest szybsze; Zapobiega fragmentacji sterty; I łatwiej jest debugować.
Tak, to wystarczy, aby zdecydować się na pulę obiektów.
Cytowanie dokumentacja Zwiększ
Kiedy należy korzystać z basenu?
Baseny są zwykle używane, gdy istnieje dużo alokacji i deallocation małych obiektów. Innym powszechnym zastosowaniem jest sytuacja powyżej, w której wiele obiektów może zostać usuniętych z pamięci.
Zobacz Boost Pool biblioteka
środka, środek, środek. Wtedy będziesz wiedzieć,, i nie będziesz musiał polegać na spekulacji lub wytycznych.
Ponadto, jeśli Dirk Grunwald w wersji CustomMalloc jest nadal dostępny, spróbuj. Syntetyzuje implementację malloc
dostosowaną do potrzeb pojedynczej aplikacji.
Jak zwykle - to zależy. A jeśli możesz użyć puli obiektów, oczywiście nie "potrzebujesz" do tworzenia i niszczenia rzeczy. Więc potrzebujemy więcej szczegółów. –