[Bug libstdc++/45574] cin.getline() is extremely slow

tstarling at wikimedia dot org gcc-bugzilla@gcc.gnu.org
Thu Sep 9 14:12:00 GMT 2010



------- Comment #18 from tstarling at wikimedia dot org  2010-09-09 14:12 -------
Created an attachment (id=21752)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=21752&action=view)
gprof output

I haven't managed to get libstdc++ to compile with -pg, but compiling the test
program with -static at least gives you a function breakdown. gprof output
attached for 1 million lines, 500 bytes per line. To summarise:

fgetc: 36.13%
istream::getline: 18.01%
ungetc: 16.70%
_IO_sputbackc: 9.54%
stdio_sync_filebuf::underflow: 5.66%
stdio_sync_filebuf::uflow: 4.93%

I should have spotted it from reading the code, it's not a loop of getc(), it's
a loop of ungetc(getc()) && getc(). It really demonstrates how poorly suited
the streambuf interface is to unbuffered input. The virtual functions called by
istream::getline() don't give much flexibility. So I still have no other ideas
apart from breaking the ABI.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45574



More information about the Gcc-bugs mailing list