On Feb 22, 2013, at 1:39 PM, Jeff Morriss <jeff.morriss.ws@xxxxxxxxx> wrote:
> Basically you're proposing building one bigger buffer for writing rather than doing several smaller writes?
>
> My experience would say no: memcpy()s should be avoided whenever possible. Admittedly my experience does not include a lot of file I/O but I would think/hope the OS would do a good job of buffering smaller writes into larger I/Os.
If standard I/O (FILE *'s) is being used, doing extra copies into a buffer and a single fwrite() will probably hurt rather than helping, as standard I/O does the buffering in userland, so the copies into a buffer (which is probably somewhere between 4K and 8K in size, but may be larger) are already being done by fwrite(). We're using standard I/O in that code path.
If write() were being used directly, doing extra copies into the buffer and a single write() *might* help, as, while there is buffering being done in the kernel, you would be making more system calls with multiple write()s. (That's one reason for the standard I/O library - it does that buffering for you.)