我感兴趣的是两者之间是否存在理论速度差异
fwrite(str , 1 , 100 , fp );
Run Code Online (Sandbox Code Playgroud)
和
fwrite(str , 100 , 1 , fp );
Run Code Online (Sandbox Code Playgroud)
基于 glibc 中函数的编写方式、它进行的写入调用次数以及缓冲方式(忽略 gcc 上的硬件差异)。
musl或glibc或FreeBSD libc没有区别,因为它们都使用以下命令调用底层函数size*nmemb:
size_t fwrite(const void *restrict src, size_t size, size_t nmemb, FILE *restrict f)
{
size_t k, l = size*nmemb;
// ...
k = __fwritex(src, l, f);
Run Code Online (Sandbox Code Playgroud)
size_t
_IO_fwrite (const void *buf, size_t size, size_t count, FILE *fp)
{
size_t request = size * count;
// ...
written = _IO_sputn (fp, (const char *) buf, request);
Run Code Online (Sandbox Code Playgroud)
n = count * size;
// ...
uio.uio_resid = iov.iov_len = n;
// ...
if (__sfvwrite(fp, &uio) != 0)
Run Code Online (Sandbox Code Playgroud)