2009-08-09 8 views
11

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.

+0

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. –

Odpowiedz

7

Przewidywany koszt zniszczenia obiektu, alokacji, alokacji i budowy jest wyższy niż koszt reinicjalizacji do nowego użytku.

+3

Powiedziałbym "może być niski" - jest to całkowicie możliwe (nawet prawdopodobne), że inicjalizacja jest drogim etapem. –

+0

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

+0

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? –

3

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ć.

8

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

7

ś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.