2013-07-25 17 views
8

Podczas czytania książek w C++ i standardowej bibliotece widzę częste odniesienia do alokatorów.Co to są podzielniki i kiedy ich użycie jest konieczne?

Na przykład Nicolai Josuttis za C++ Standardowa biblioteka omawia je szczegółowo w poprzednim rozdziale, a oba elementy 10 ("mieć świadomość konwencji podzielniki & ograniczenia«) i 11 (»zrozumieć legalnych zastosowań zwyczaju podzielniki ") w Scott Meyers's Efektywny STL dotyczy ich użycia.

Moje pytanie brzmi, w jaki sposób podzielniki reprezentują specjalny model pamięci? Czy domyślne zarządzanie pamięcią STL nie jest wystarczające? Kiedy należy użyć alokatorów?

Jeśli to możliwe, proszę wyjaśnić za pomocą prostego przykładu modelu pamięci.

+0

Prawdopodobnie powiązane: [atrakcyjne przykłady niestandardowych alokatorów C++ STL?] (Http://stackoverflow.com/q/826569) –

Odpowiedz

8

Alokator streszcza przydzielanie pamięci surowej i konstruowanie/niszczenie obiektów w tej pamięci.

W większości przypadków domyślny alokator jest całkowicie w porządku. W niektórych przypadkach można jednak zwiększyć wydajność, zastępując ją czymś innym. Klasycznym przykładem jest wtedy, gdy potrzebujesz/chcesz przydzielić dużą liczbę bardzo małych obiektów. Rozważmy na przykład wektor ciągów, które mogą mieć po kilkanaście bajtów. Normalny przydzielający używa operator new, co może nałożyć dość duży narzut dla takich małych obiektów. Utworzenie niestandardowego przydziału przydzielającego większą porcję pamięci, a następnie podzielenie go w razie potrzeby, może zaoszczędzić sporo pamięci i czasu.

Powiązane problemy