Mam do czynienia z wieloma ciągami w moim programie. Te dane ciągu nie zmieniają się przez cały czas życia po tym, jak zostaną wczytane do mojego programu.Jak zwolnić nieużywaną pojemność ciągu
Ale ponieważ łańcuch C++ rezerwuje pojemność, marnują dużo miejsca, które nie będą używane na pewno. Próbowałem zwolnić te przestrzenie, ale to nie zadziałało.
Poniżej znajduje się prosty kod, który próbowałem:
string temp = "123456789";
string str;
cout << str.capacity() << endl;
str.reserve(16);
cout << str.capacity() << endl;
// capacity is 31 on my computer
str += temp;
cout << str.capacity() << endl;
str.reserve(16);
cout << str.capacity() << endl;
// can't release. The capacity is still 31.
(Kompilator Visual C++)
Jak mogę zwolnić?
Have zabrakło ci pamięci? Jeśli nie, jest to przedwczesna optymalizacja. Jeśli skończy Ci się pamięć, to które obiekty RZECZYWISTE dominują przy przydzielaniu pamięci? Chodzi o to, że tego rodzaju rzeczy nie są pomocne. –
Nie ma sposobu, aby wymusić na alokatorze użycie mniejszej liczby bajtów ** do wstępnej konstrukcji danego ciągu znaków ** - a przynajmniej nie bez napisania własnego szablonu klasy przydziału STL (i prawdopodobnie nawet wtedy). –