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_type
i 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?