W documentation widzę, że std::vector<bool>
jest zoptymalizowany pod kątem wydajności kosmicznej, dzięki czemu każda wartość boolowska zajmuje jeden bit. Z dokumentacji:std :: wektor <bool> implementacja optymalizacji
Sposób, w jaki std :: vector uzyskuje efektywność przestrzenną (a także to, czy jest w ogóle zoptymalizowany) jest zdefiniowaną implementacją.
Czy to oznacza, że zależy to od implementacji kompilatora? Jeśli tak, to gdzie mogę sprawdzić, czy mój kompilator je obsługuje? Dlaczego nie mieliby go wspierać? Wydaje się, że jest to bardzo prosta i wydajna implementacja.
Jeśli nie, co to znaczy i co oznacza, że chcę, aby ta optymalizacja miała miejsce?
Używam zestawu narzędzi TDM GCC.
Tak, oznacza to, że implementacja 'std :: vector' jest w dużej mierze zależna od kompilatora. Może nie być w ogóle zoptymalizowany lub może być zoptymalizowany w sposób specyficzny dla implementacji. Ogólnie rzecz biorąc, można to znaleźć, sprawdzając dokumentację kompilatora. Z GCC i innymi narzędziami open-source, przypuszczam, że możesz również sprawdzić kod źródłowy. Ale to nie tylko wymaga więcej pracy, ale może nie być dobrym pomysłem, ponieważ kod źródłowy dokumentuje tylko implementację, a nie kontrakt. –
Łatwym sposobem sprawdzenia, czy taka optymalizacja jest zapewniona, jest sprawdzenie, czy 'std :: vector :: reference_type' to' bool & 'lub coś innego. W tym drugim przypadku masz typ proxy, który powinien być dozwolony tylko dla "zoptymalizowanej" implementacji. –
@MatteoItalia 'std :: vector :: reference' jest wymagane, aby być proxy, nawet jeśli implementacja faktycznie nie pakuje bitów. –