Jak boost.pool osiąga ponowne wykorzystanie przydzielonej pamięci?

tło

Mójpoprzednie pytanie oboost.pool doprowadził mnie do szczegółowego zbadania boost.pool, a teraz mam dodatkowe pytanie, aby sfinalizować moje zrozumienie.

Preludium

To odniesienie podaje następujące informacje na temat wzorca puli obiektów:

Wzorzec puli obiektów to wzorzec projektowania kreacji programowej, który używa zestawu zainicjowanych obiektów, gotowych do użycia, zamiast alokować je i niszczyć na żądanie.

Z tego co mogę powiedzieć,boost.pool (uproszczony) implementuje wzorzec puli obiektów za pomocą alokacji pamięci i zarządzania, głównie w oparciu o rozmiar anelement_typei zwraca prosty wskaźnik do przydzielonego obiektu:

element_type * malloc();
void free(element_type * p);

Prosty przykład przypomina, że ​​nie jest konieczne jawnefree pozyskany element:

X * const t = p.malloc();
... // Do something with t; don't take the time to free() it.

Pytanie

Rozumiem, że przydzielona pamięć zostanie bezpiecznie uwolniona po zniszczeniu obiektu puli, ale w jaki sposób pula wie, kiedy blok pamięci pozyskany przez klienta został zwolniony z powrotem do puli i może być ponownie użyty, jeśli jego interfejs przekazuje bezpośredni wskaźnik doelement_type, ale wezwanie dofree() nadal nie jest wymagane? tj. W jaki sposób pula boost może ponownie wykorzystać tę pamięć, jeśli nie można mieć pewności, że pamięć nie jest nadal używana? A jeśli nie użyje ponownie tej pamięci, czy jest to nawet uważane za ten sam wzorzec, który został wyjaśniony przez odniesienie do wiki?

questionAnswers(2)

yourAnswerToTheQuestion