Improve memory backend of mio_read()
authorColomban Wendling <ban@herbesfolles.org>
Sat, 24 Mar 2012 21:52:37 +0000 (22:52 +0100)
committerColomban Wendling <ban@herbesfolles.org>
Sat, 24 Mar 2012 22:05:43 +0000 (23:05 +0100)
commit7a14b0ea411bf91b7d233ac5bfa199de79b6606e
tree4a4d7a8c115241ba93a9715a4813621d1c1c61a5
parent0539e8796cdecfd35ae8a41622be1e1b6bb65aa4
Improve memory backend of mio_read()

Drop the loop in mem_read() in favor of a single memcpy() call.

This greatly improves performances when nmemb > 1, for a small loss
for some values of size when nmemb == 1.  Gain can theoretically be
infinite since swapping nmemb and size parameters changes almost
nothing while it had a dramatic performance impact previously.  Loss
is up to about 25% in the worst case for some values of size when
nmemb is 1.

Also, now the function always copies as much data as possible, not only
whole blocks.  This follows the glibc implementation of fread() and
simplifies the code.  Doing so also fixes the position after a partial
read to be at the last readable character rather than the end of the
last read block.
mio/mio-memory.c