gromit:/tmp$ cat resize.cc #include <iostream> #include <string> using namespace std;
int main() { string line; for ( size_t c=8162; c<8166; ++c ) { line.reserve(c); cout << line.capacity() << endl; } } gromit:/tmp$ g++-3.4 -v Lese Spezifikationen von /usr/lib/gcc/i486-linux/3.4.4/specs Konfiguriert mit: ../src/configure -v --enable-languages=c,c++,java,f77,pascal,objc,ada,treelang --prefix=/usr --libexecdir=/usr/lib --with-gxx-include-dir=/usr/include/c++/3.4 --enable-shared --with-system-zlib --enable-nls --without-included-gettext --program-suffix=-3.4 --enable-__cxa_atexit --enable-libstdcxx-allocator=mt --enable-clocale=gnu --enable-libstdcxx-debug --enable-java-gc=boehm --enable-java-awt=gtk --disable-werror i486-linux Thread-Modell: posix gcc-Version 3.4.4 20041218 (prerelease) (Debian 3.4.3-6) gromit:/tmp$ g++-3.4 resize.cc gromit:/tmp$ ./a.out 8163 8163 16355 12259 Apparently, reserve/resize overallocate when called with 8164 as argument (unless the string has been empty before). There are other such points, at 12260, 16356, 20452, 24548 and so on at each bump where a (monotonic) change in size is intented. -- Summary: Non-monotonic behavior of string::reserve Product: gcc Version: 3.4.4 Status: UNCONFIRMED Severity: enhancement Priority: P2 Component: libstdc++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: kreckel at ginac dot de CC: gcc-bugs at gcc dot gnu dot org GCC build triplet: i486-linux GCC host triplet: i486-linux GCC target triplet: i486-linux http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20114