Kiedy to jest już specjalne, wektor < bool> należy przydzielić w blokach o rozmiarze 8. Wiem też, że niektórzy ludzie pracują nad uzyskaniem malloc, aby zwrócić "prawdziwy rozmiar" wszystkich przydzielonych bloków, więc jeśli przydzielony blok wprowadziłby nieuniknione odpady, zamiast tego wektor użytecznie wykorzystuje przestrzeń.
Gdy przechodzimy do 64-bitowych systemów operacyjnych, przestrzeń pamięci nagle staje się (słynne ostatnie słowa) większa niż ktokolwiek, kto kiedykolwiek zbliży się do wypełnienia, więc rozsądniej jest przydzielić duże bloki pamięci wirtualnej i wypełnić je za każdym razem. Przenoszenie obiektów dookoła jest kosztowne, aw praktyce stratą czasu, ponieważ nie poruszamy się, ponieważ pamięć fizyczna jest ograniczona, tylko z jednego wirtualnego miejsca do drugiego!
Mogę sobie wyobrazić, że niektóre przydzielające mogą chcieć przydzielić w blokach o stałej długości. Zatem jeśli rozmiar elementu jest mniejszy niż ten rozmiar bloku, może on nadal się przeorganizować. Tylko zgadnij ... –
@Johannes: Jeśli napisałeś to jako odpowiedź, byłoby o wiele łatwiej wyjaśnić. Zobacz mój komentarz do podwójnego poniżej, a także nie widzę, jak alokator może komunikować, że do wektora (allocate() zwraca tylko wskaźnik), ale przypuszczam, że może to być częściowo wyspecjalizowane, jeśli std :: allocator jest używany. Mimo to zastanawiam się nad specjalizacjami użytkownika (nadal dozwolone, prawda?) I konfliktami. –