https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63466

--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> ---
You're comparing apples and oranges.

This function forces you to do additional allocations for the arguments, which
has nothing to do with iostream performance:

  void __attribute__((noinline, noclone)) func(string &, string &)

This allocates even more memory:

                istringstream iss(line);

The expression (iss >> index >> s) is far more flexible than your C version,
handling adjacent whitespace and being able to extract arbitrary types from the
stream.

If you don't need those extra allocations and flexibility then don't use them;
your C code is a valid C++ program too. But rewriting your C++ code to be
equivalent to the C code (e.g. by using std::string::find_first_of) would
remove any use of stringstream, leaving only the performance of std::getline as
a limiting factor, which is not the topic of this bug report.

So if your point is simply "iostreams are slower than stdio" then yes, we know,
welcome to 1998 ;-)

Reply via email to