getc() and fgetc() have fallen in a hole and can't get up.
paul.matthews at centrelink.gov.au
paul.matthews at centrelink.gov.au
Thu Apr 11 11:01:28 EST 2002
I have a number of programs that are very IO bound (this is unavoidable).
So I have been experimenting with different means of reading the data. I
started off with the non-standard getline() function. This is the fastest,
but when a POSIX'ly correct getline() replacement is substituted,
performance fell into a major hole.
The C++ getline function that comes with the iostreams classes is even
slower.
Further experimentation shows that getc() is a major drag, far more than
it should be. It also appears that getc() is no longer a macro. The
fread() routine also appears to be suboptimal speed wise now.
Since not wanting to double buffer though FILE* and then an though an
internal buffer. I ported over the java.io classes InputStream,
FileInputStream, and BufferedInputStream to C++. The FileInputStream class
talks directly to a file descriptor (int).
Despite using virtual functions, and lots of assertion code, the judicious
use of inline allowed not only this implementation to beat getc(), but be
POSIX'ly compatable, and do usefull things like throw exceptions on fatal
read errors.
Question: Why have the I/O routines become so slow?
[ Now all I need are a POSIX snprintf(), asprint() and I'll be right. ]
--
Paul Matthews
ETI Migrations
x446169
-------------- next part --------------
HTML attachment scrubbed and removed
More information about the linux
mailing list